C言語なら俺に聞け(入門篇) Part 22
■ このスレッドは過去ログ倉庫に格納されています
0656デフォルトの名無しさん
2007/12/15(土) 16:25:02なんですが、コンパイル後起動させようとするとそのまま停止
してしまいます。m=1000にして1000までの素数を求めると起動
します。なぜでしょうか?ただパソコンのスペックが低いせい
かもしれませんが・・・
int main(void)
#define l 10000
{
int m=10000,i,j,q,p[l];
for(i=1;i<m;i++) p[i]=0; /*配列の初期化=フラグを0にしておく.フラグが0の間は素数の可能性がある*/
p[1]=1; /*1は素数じゃないので除外(=配列に格納されてるフラグを1にする)*/
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1; /*p[4]=1,p[6]=1,p[8]=1,....2以外の偶数は素数じゃないので除外*/
/*ここからは奇数の中で素数じゃないのを除外するループ*/
q=3; /*1以外で一番小さい奇数3を最初に代入*/
while(pow(q,2)<=m){
for(j=pow(q,2);j<m;j=j+2*q) p[j]=1;/*p[pow(3,2)=9]=1,p[9+2*3=15]=1,p[15+2*3=21]=1,...と3の倍数で
再び奇数となるものだけを除外していく*/
q += 2; /*2加算することにより、次は5,その次は7の倍数を除外...と順に奇数をたどって除外していく*/
}
/*ココからは最終的にフラグが0だった(=素数と判明した)数を出力する*/
for(i=1;i<m;i++){ /*i=2にしておけばp[1]=1;は書かなくていい*/
if(p[i]==0) printf("%d\n",i);
}
}
■ このスレッドは過去ログ倉庫に格納されています