• 締切済み

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);   } } } これなんですが、実行したらエラーが出てしまうんですがなぜでしょうか?

みんなの回答

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

質問番号:5549689のANo.1ですが、あの回答では、ソースコードのインデントを全角空白で入れています。 これはここの質問や回答では行頭の半角空白等は表示されないためインデントが見られないため、回答の表示を人間が見やすくするには全角空白を使うしかないからです。 実際のCソースコーは文字列中以外で全角空白を入れるとエラーになるので、全角空白は半角空白やタブ等に置き換えなければいけません。

回答No.4

すぐ上がるのが 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; // 追加 }

参考URL:
http://www.mapee.jp/cpp/post_9.html
回答No.3

全角空白が混じっているようですね。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

実行環境、開発環境を書かず、「エラーが出ます」だけ。 どういうエラーなのかという質問に、「よく判らない」という補足。 これでは、さっぱり判りませんよ。 エラーは表示されていないのですか? 表示されているなら、そのエラーメッセージを補足してください。

saya1001
質問者

補足

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です。ちなみにこのようなエラーメッセージが出ます。

回答No.1

どんなエラーが出たのですか? # 当方の環境(Vista64,8G-mem,VC++)では正しく動作しました。

saya1001
質問者

補足

それが自分でもわからないのです。

関連するQ&A