こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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

投稿日時 - 2009-12-27 10:40:51

QNo.5550297

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.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 );
}

投稿日時 - 2010-01-02 07:26:11

ANo.6

Wr5

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
に書かれますが。

ちなみに、書いたプログラムは「実行」できていませんので念のため。

投稿日時 - 2009-12-27 23:23:19

ANo.5

#1です。

質問に掲載されているソースはそのままコピーしたのですか?

そのままコピー貼り付けしたものなら、全角のスペースが入っていませんか?

投稿日時 - 2009-12-27 11:29:18

ANo.4

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

投稿日時 - 2009-12-27 11:28:40

ANo.3

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

投稿日時 - 2009-12-27 11:23:29

ANo.2

「原因」はともかく、「現象」を説明して。

> 実行したらエラーが出てくるんです

「具合が悪い」の一言で薬をくれる医者はいません。

投稿日時 - 2009-12-27 11:06:24

ANo.1

だから、
「実行したらエラーが出てくるんです。」

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

投稿日時 - 2009-12-27 10:45:42