• 締切済み

c言語で素数を判別するプログラムについて

for文の部分がうまく機能しません。分かる方お手すきでお願いします。 for(i=1;i<=number;i++){      /*number:入力した値*/ surplus=number%i; /*surlus:余り*/ if(surplus==0) divisible_counter++;/*割切れた数の個数*/ } if(divisible_counter>=3||divisible_counter==1) printf("%d is not prime number\n",number); else if(divisible_counter==2) printf("%d is prime number\n",number); } return 0; }

みんなの回答

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.4

divisible_counterの初期化は処理系によるけど、所期するのがプログラマーとしての基本スキル で、ここからは、プログラムのテクニック的なおせっかいだけど、このプログラムって、numberとして0とか負の数が来たら誤動作するよね ですから、まず、Numberが負、0、1、正で場合分けする必要がある。 また、上記のように場合分けしてある場合、ループの範囲は2からnumber/2-1。 更に、1回でも割り切れれば素数じゃないこと確定なので、ループは停止していいです。 最初に一度2でわれば偶数確定なので、ループの範囲を3からnumber/3-1にできて、ステップ間隔も2に出来てループの指すとが大幅に下がります。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

テストしてみましたが、合っているようですが? 1 is not prime number 2 is prime number 3 is prime number 4 is not prime number 5 is prime number 6 is not prime number 7 is prime number 8 is not prime number 9 is not prime number 10 is not prime number 11 is prime number 12 is not prime number 13 is prime number 14 is not prime number 15 is not prime number 16 is not prime number 17 is prime number 18 is not prime number 19 is prime number 20 is not prime number 21 is not prime number 22 is not prime number 23 is prime number 24 is not prime number 25 is not prime number 26 is not prime number 27 is not prime number 28 is not prime number 29 is prime number

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

失礼しました。 約数の数を数えて判定する方法だったのですね。それなら、i=1でかまいません。 // 素数判定だけなら無駄のある方法ですが。 ○ 「全角空白」が入っていたり、 } が全角だったりします ○ { } の対応がとれていません ○ divisible_counter を初期化している部分がありません。 これらは、ここに「書き込んだ」ときの問題なのでしょうか? それとも、元のソースコードでそうなっているのでしょうか? あと > for文の部分がうまく機能しません。 質問するときは、どう「うまく機能しない」か書くようにしましょう。 エラーでコンパイルできないのか、○○と期待したのに××となった、とか。 そういう現象から、何が間違えているのかを予想するのが、プログラム修正の最初の一歩です。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> for(i=1;i<=number;i++){      /*number:入力した値*/ このforで、 i は 1, 2, ... number と変化します。 では、 > surplus=number%i; /*surlus:余り*/ i = 1 のときの「余り」っていくつになるでしょうか?

関連するQ&A