プロが教える店舗&オフィスのセキュリティ対策術

100未満の素数を表示するには


「0~99までの配列を用意し、100の平方根である10までの素数の倍数を素数でない数としていく。」

実行例の一部「2の倍数を消去:468…96 98」
というように次は3の倍数、5の倍数、7の倍数を表示させ、それらに該当しないのを表示せよという問題です。

ヒントとして↓がもともと書かれていたんですが、ヒントがよくわかりません。

2の倍数を表示し消去する方法を教えてください。


#include<stdio.h>

int main()
{
int i,j,prime[100];


for (i=0;i<N;i++) prime[i]=1; //全ての要素を素数の候補とする
prime[0]=prime[1]=0; //0と1は素数ではない






printf("\n100未満の素数を出力\n");




return 0;

}

A 回答 (4件)

ヒント1


2以外の2の倍数を100まで表示
for ( i = 2; i * 2 <= 100; i++)
{
printf("%d ", i * 2);
}
ヒント2
消去というか0を代入
prime[2以外の2の倍数] = 0;

この回答への補足

for (i=0;i<N;i++) prime[i]=1; //全ての要素を素数の候補とする
prime[0]=prime[1]=0; //0と1は素数ではない

このNは適当に変えていいってことですか?
宣言されてないですし…。

あとfor()のあとは{がつくと思うんですが、↑の場合


prime[i]=1;
prime[0]=prime[1]=0;
これが繰り返しされるってことでいいんですか?

補足日時:2010/07/10 13:54
    • good
    • 0

>あとfor()のあとは{がつくと思うんですが、↑の場合



必ずしもそうではありません。
for文やif文では、

for (~) {
/* 何かの文 */
}

の「何かの文」が1個だけのとき、下記のように { と } を省略できます。

for (~)
/* 何かの文(1個だけ) */
    • good
    • 0

たとえば、



#include<stdio.h>
#include<math.h>

int main()
{
int i,j,prime[100],N=100;

for (i=0;i<N;i++) {
prime[i]=i;//全ての要素を素数の候補とする
}
prime[0]=prime[1]=0;//0と1は素数ではない

for(j=2;j<sqrt(N);j++){//math.hを使わなければ、j<10か
for(i=j+1;i<N;i++){
if(prime[i]%j==0){
if(prime[i]!=0)
printf("%dの倍数 %d\n",j,prime[i]);//倍数の表示
prime[i]=0;
}
}
}

printf("\n%d未満の素数を出力\n",N);
for (i=0;i<N;i++) {
if(prime[i]!=0)
printf("%d\n",prime[i]);
}
return 0;

}
    • good
    • 0

http://ideone.com/qfDx3

定番、エラトステネスの篩…だけど。
なんか綺麗じゃなくて納得行かないorz

#自分が組みたいときは、リスト使うだろうからね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!