- 締切済み
宿題で100000未満の素数の総数を求めるプログラミングの課題が出たの
宿題で100000未満の素数の総数を求めるプログラミングの課題が出たのですが、途中までは分かったのですが、先生が言うには最後のほうに、i=2からNUMまで配列要素prime[i]が1である素数iを出力するプログラムを書かないといけないんですが、それがわかりませんので教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- rinkun
- ベストアンサー率44% (706/1571)
回答No.5
エラーが出るなら具体的にどんなエラーか記載ください。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
100000程度でよければちょっと検索すればでてくるから, それをがんばって数えればいいのでは? 「総数を求める」のが問題であって, 「素数を求める」ことは課題に入ってませんよね.
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答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
「最後の方に」といわれましても、質問者さんが どういったソースを書かれたがわからないことには、 どこにどのような内容を加えればよいか 全くわかりません。
- 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行に一つずつ表示されます。
質問者
補足
エラーが出てしまうんですが。
補足
すみません。こういうプログラムです。 #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); } } }