- 締切済み
100000未満素数の総数を求めるのに困っているので教えてください。
100000未満素数の総数を求めるのに困っているので教えてください。 #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); } } } これなんですが、実行したらエラーが出てしまうんですがなぜでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- rinkun
- ベストアンサー率44% (706/1571)
質問番号:5549689のANo.1ですが、あの回答では、ソースコードのインデントを全角空白で入れています。 これはここの質問や回答では行頭の半角空白等は表示されないためインデントが見られないため、回答の表示を人間が見やすくするには全角空白を使うしかないからです。 実際のCソースコーは文字列中以外で全角空白を入れるとエラーになるので、全角空白は半角空白やタブ等に置き換えなければいけません。
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
すぐ上がるのが int型のサイズです。long に換えてみてはいかがでしょうか? その他、Mac OSX の gcc では問題なく動きますので怪しげな箇所を訂正してみました。なお、main()関数は int型を返すようにプログラムされているのでエラー無しの「return 0;」が必要です。 /* Prime number program by Mac OSX * file name: saya.c * compile: gcc saya.c * execution: ./a.out */ #include <stdio.h> #include <math.h> #define NUM 100000 int main(void) { long int prime[NUM+1],i,j,Limit; // 訂正 for(i=2;i<=NUM;i++){ prime[i]=1; } Limit=(int)sqrt((double)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 ",i); } } printf("?n"); return 0; // 追加 }
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
全角空白が混じっているようですね。
- edomin7777
- ベストアンサー率40% (711/1750)
実行環境、開発環境を書かず、「エラーが出ます」だけ。 どういうエラーなのかという質問に、「よく判らない」という補足。 これでは、さっぱり判りませんよ。 エラーは表示されていないのですか? 表示されているなら、そのエラーメッセージを補足してください。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
どんなエラーが出たのですか? # 当方の環境(Vista64,8G-mem,VC++)では正しく動作しました。
補足
それが自分でもわからないのです。
補足
ERROR: syntax error ERROR: syntax error before or at line 21 in file C:\source\sosuu1.c ==>: if (prime[i]){ BUG: ・== ??? bug may be here ERROR: syntax error ERROR: syntax error before or at line 22 in file C:\source\sosuu1.c ==>: printf("%d\n",i); BUG: ・== ??? bug may be here ERROR: cannot execute command 'C:\source\sosuu1.c' 実行環境、開発環境はそれぞれchsiteです。ちなみにこのようなエラーメッセージが出ます。