プロが教えるわが家の防犯対策術!

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

A 回答 (5件)

質問番号:5549689のANo.1ですが、あの回答では、ソースコードのインデントを全角空白で入れています。


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

すぐ上がるのが 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
    • good
    • 0

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

    • good
    • 0

実行環境、開発環境を書かず、「エラーが出ます」だけ。


どういうエラーなのかという質問に、「よく判らない」という補足。

これでは、さっぱり判りませんよ。
エラーは表示されていないのですか?
表示されているなら、そのエラーメッセージを補足してください。

この回答への補足

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

補足日時:2009/12/27 11:05
    • good
    • 0

どんなエラーが出たのですか?



# 当方の環境(Vista64,8G-mem,VC++)では正しく動作しました。

この回答への補足

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

補足日時:2009/12/27 10:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!