配列を使用して、素数計算をしているのですが、どうしてもエラーになるところがあるので、教えていただけませんか? 前半は配列を使っていない状態です。 赤い個所を緑のように変更します。 そうすると、エラーが青の部分で起こります。 配列を用いて計算をした時比較は出来ないのでしょうか? よろしくお願いします。 #define PRIME 1 #define NOPRIME 2 #include <stdio.h> int main() { //a=フラグ i=素数用変数 j=割り算判定 x=格納変数 number=格納配列 int a, i, j, x=2, number[100]={1,2}; for(i=3; i<10; i++){ //数の決定 a = PRIME; for(j=2; j<i && (a == PRIME); j++){ //割る数決定 if( i%j == 0 ){ //割り切れた時=素数でない a = NOPRIME; break; } } for(j=2; (number[j])<i && (a == PRIME); j++){ //割る数決定 ☆ if( (i%(number[j])) == 0 ){ //割り切れた時=素数でない a = NOPRIME; break; } } if(a == PRIME){ //割り切れなかった時実行 number[x] = i; x++; printf("確認用:%d\n",i); //確認用 } printf(" 数字:%d終了\n",i); } //最終表示 for(i=0; i<x; i++){ printf("%d,",number); } return 0; }
配列を計算して比較するとエラーが…
配列を計算して比較するとエラーが…
Re:配列を計算して比較するとエラーが…
"a = NOPRIME"の後に"break"しているので、"for(・・・;・・・ && (a == PRIME);・・・)"
の"a == PRIME"は、必要ない。
配列"number"にどのような値が格納されているか確認しましょう。
Re:配列を計算して比較するとエラーが…
あれは、あったほうが計算量が少なくなるので、付けています。
number[/url]には0がきちんと入っていたのですが、どうしても比較するところで、エラーが起きているのです。
number[/url]には0がきちんと入っていたのですが、どうしても比較するところで、エラーが起きているのです。
Re:配列を計算して比較するとエラーが…
単純にnumber配列の初期化が出来てないからではないですか?
number[100]={1,2};
これだけでは、number[/url]の添え字が0か1以外の場合に例外が発生するかと思いますよ。
number[100]={1,2};
これだけでは、number[/url]の添え字が0か1以外の場合に例外が発生するかと思いますよ。
Re:配列を計算して比較するとエラーが…
if( (i%(number[j])) == 0 )
上記のエラーの出ている箇所ですが、jの初期値が2な訳ですから、最初に参照される値がnumber[2]になりますよね?
初期化されていませんが、たまたま0が入っていたとしても、余り算とはいえ0で割るという行為においては結果は同じです。
0で割る事で例外が発生しているのではないかと思います。
上記のエラーの出ている箇所ですが、jの初期値が2な訳ですから、最初に参照される値がnumber[2]になりますよね?
初期化されていませんが、たまたま0が入っていたとしても、余り算とはいえ0で割るという行為においては結果は同じです。
0で割る事で例外が発生しているのではないかと思います。