• 締切済み

宿題で100000未満の素数の総数を求めるプログラミングの課題が出たの

宿題で100000未満の素数の総数を求めるプログラミングの課題が出たのですが、途中までは分かったのですが、先生が言うには最後のほうに、i=2からNUMまで配列要素prime[i]が1である素数iを出力するプログラムを書かないといけないんですが、それがわかりませんので教えてください。

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.5

エラーが出るなら具体的にどんなエラーか記載ください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

100000程度でよければちょっと検索すればでてくるから, それをがんばって数えればいいのでは? 「総数を求める」のが問題であって, 「素数を求める」ことは課題に入ってませんよね.

参考URL:
http://www.rsok.com/~jrm/printprimes.html
回答No.3

[1] prime[2]~prime[NUM] を 1 で埋める [2] i = 2 [3] prime[i] が 1 なら素数なので出力し、   (iの倍数は素数ではないので)prime[iの倍数] をすべて 0 にする [4] i = i + 1 [5] i <= NUM である間、2,3,4 を繰り返す

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

「最後の方に」といわれましても、質問者さんが どういったソースを書かれたがわからないことには、 どこにどのような内容を加えればよいか 全くわかりません。

saya1001
質問者

補足

すみません。こういうプログラムです。   #include<stdio.h> #include<math.h> #define NUM 100000 int main(void){ int prime[NUM+1],i,j,Limit; for(i=2;i<=NUM;i++){ prime[i]=1; } Limit=(int)sqrt(NUM); for(i=2;i<=Limit;i++){ if(prime[i]==1){ for(j=2*i;j<=NUM;j+=i){ prime[j]=0; } } } for ( i=2;i<=NUM;i++) {  if (prime[i]) {    printf("%d\n",i);   } } }

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

エラトステネスのふるいで素数を求めてるってことで良いのかな。 iが素数のときprime[i]が1で、iが素数でないときprime[i]は0とします。 このとき for (int i=2;i<=NUM;i++) {  if (prime[i]) {   printf("%d\n", i);  } } とすれば、素数が1行に一つずつ表示されます。

saya1001
質問者

補足

エラーが出てしまうんですが。