- 締切済み
エラーがどこかわからない
#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); } } } これは100000未満の素数の総数を求めるプログラムなんですが、実行したらエラーが出てくるんです。何度も確認しても正しいはずなんですがエラー出てきて困っています。どこが間違っているでしょうか?
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
>これは100000未満の素数の総数を求めるプログラムなんですが、実行したらエラーが出てくるんです。 1)これでは「素数の総数」は求まりません。 2)「コンパイルエラー」ですので「実行」できません。 1)この「質問」を含め「・・総数を求める」のを忘れていませんか。 http://okwave.jp/qa/q5550297.html http://okwave.jp/qa/q5550221.html http://okwave.jp/qa/q5549689.html ( 5550221 の No.4 さんの回答を含め、それを見ず(待たず)に新たな「質問」たてるのは如何かなと・・) 2)の原因として、No.4, No.5 さんが言われるとおり、「全角スペースでコンパイルエラー」と思われます。 ・「全角スペース」を可視表現する「テキストエディタ」の使用をお勧めします。 蛇足 100000「未満」とは、100000 を含めません。 質問文中のソースは、「以下」で設計?されています。 平文との整合、不要( if(prime[i]==1){ )部分を割愛したものを投稿します。 #include <stdio.h> #include <math.h> #define NUM 100000 int main( void ) { int prime[ NUM ], i, j, Limit, iTotal = 0; for( i = 2; i < NUM; i++ ) prime[ i ] = 1; // 全て「素数」で初期化 Limit = (int)sqrt( NUM ); for( i = 2; i <= Limit; i++ ){ for( j = ( 2 * i ); j < NUM; j += i ) prime[ j ] = 0; // ある数の整数倍は素数でない } for( i = 2; i < NUM; i++ ){ if( prime[ i ] ){ iTotal++; // 総数をカウント printf( "%d\n", i ); } } printf( "素数の総数 %d\n", iTotal ); return( 0 ); }
- Wr5
- ベストアンサー率53% (2173/4061)
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' ってエラーが出るんですよね? http://oshiete1.goo.ne.jp/qa5550221.html に書かれますが。 ちなみに、書いたプログラムは「実行」できていませんので念のため。
- edomin7777
- ベストアンサー率40% (711/1750)
#1です。 質問に掲載されているソースはそのままコピーしたのですか? そのままコピー貼り付けしたものなら、全角のスペースが入っていませんか?
- junkUser
- ベストアンサー率56% (218/384)
特段問題無く動きましたよ。 もしかして、全角スペースでコンパイルエラーを起こしているんじゃないですか?
- buriburi3
- ベストアンサー率44% (353/792)
prime[100001] で32bitだとして400kbyteあまりのスタック使ってるけど 環境によっては実行時スタックの割当が足りないかもね。 スタックじゃなくてヒープに取るように変えたら動くんじゃね? int *prime ; prime = (int *)malloc((NUM+1)*sizeof(int)) ; に変更な。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
「原因」はともかく、「現象」を説明して。 > 実行したらエラーが出てくるんです 「具合が悪い」の一言で薬をくれる医者はいません。
- edomin7777
- ベストアンサー率40% (711/1750)
だから、 「実行したらエラーが出てくるんです。」 そのエラーメッセージを補足してください。 実行している環境によって、エラーもなく動いている人もいます。 環境に依存するエラーかもしれないでしょ?