• 締切済み

エラーがどこかわからない

#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未満の素数の総数を求めるプログラムなんですが、実行したらエラーが出てくるんです。何度も確認しても正しいはずなんですがエラー出てきて困っています。どこが間違っているでしょうか?

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.7

>これは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)
回答No.6

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)
回答No.5

#1です。 質問に掲載されているソースはそのままコピーしたのですか? そのままコピー貼り付けしたものなら、全角のスペースが入っていませんか?

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.4

特段問題無く動きましたよ。 もしかして、全角スペースでコンパイルエラーを起こしているんじゃないですか?

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.3

prime[100001] で32bitだとして400kbyteあまりのスタック使ってるけど 環境によっては実行時スタックの割当が足りないかもね。 スタックじゃなくてヒープに取るように変えたら動くんじゃね? int *prime ; prime = (int *)malloc((NUM+1)*sizeof(int)) ; に変更な。

回答No.2

「原因」はともかく、「現象」を説明して。 > 実行したらエラーが出てくるんです 「具合が悪い」の一言で薬をくれる医者はいません。

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

だから、 「実行したらエラーが出てくるんです。」 そのエラーメッセージを補足してください。 実行している環境によって、エラーもなく動いている人もいます。 環境に依存するエラーかもしれないでしょ?

関連するQ&A