• ベストアンサー

素数

Limit以下の素数をすべて表すプログラムなんですが実行した結果 ________________________________ Input Upper Limit:11 s[0]=3 s[1]=5 s[2]=5 s[3]=5 s[4]=7 s[5]=7 s[6]=7 s[7]=7 s[8]=7 s[9]=9 となるんですが s[0]=3 s[1]=5 s[2]=7 s[3]=9 にしたいですがどうすればいいのでしょうか? 教えてください。 ________________________________ #include<iostream> using namespace std; int main(void) { int Limit; int i,j,n; int s[256]; n=0; cout<<"Input Upper Limit:"; cin>>Limit; for(i=1;i<Limit;i++) { for(j=2;j<i;j++) { if(i%j==0) break; s[n]=i; cout<<"s["<<n<<"]="<<s[n]<<"\n"; n++; } } return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

#1でも言われていますがjの初期値が2のため「2で割り切れない」が条件になってしまっています。素数ではなくて奇数を求めてしまってますね。 また、このループ構造ではi <= jかi % j == 0が満たされるまで延々ループを回り続けながら同じ数を配列に格納し続けます。同じ数字が重複表示されるのはこちらが原因です。 素数の条件は「自身より小さいいずれの素数でも割り切れない」ことです。 プログラム的に書きやすい「自身の半分までのあらゆる数で割り切れない」でもいいですが、こういった条件を意識してループと素数判定の部分を作り直してみましょう。

zero-0
質問者

補足

おかげさまでできました。ありがとうございます。

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

> 結果Limit:11 > s[0]=2 > s[1]=3 > s[2]=5 > s[3]=7 Limit「以下」ならできてませんよ。Limit「未満」ならこれでいいですが。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

>s[0]=3 >s[1]=5 >s[2]=7 >s[3]=9 >にしたいですがどうすればいいのでしょうか? 素数なら、9が出ちゃダメだろ。2も無いし。

zero-0
質問者

補足

#include<iostream> using namespace std; int main(void) { int Limit; int i,j,n; int s[256]; n=0; cout<<"Input Upper Limit:"; cin>>Limit; for(i=1;i<Limit;i++) { for(j=2;j<i;j++) { if(i%j==0) break; } if(i==j) { s[n]=i; cout<<"s["<<n<<"]="<<s[n]<<"\n"; n++; } } return 0; } 書き直しました 結果Limit:11 s[0]=2 s[1]=3 s[2]=5 s[3]=7 になりました。 ありがとうございました

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>if(i%j==0) >break; >s[n]=i; 1回割り切れなかっただけで素数テーブルに格納しているところがまずいです。 なお、最小の素数は2であることをお忘れなく。

zero-0
質問者

補足

ご意見ありがとうございました。