アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
}

A 回答 (4件)

divisible_counterの初期化は処理系によるけど、所期するのがプログラマーとしての基本スキル




で、ここからは、プログラムのテクニック的なおせっかいだけど、このプログラムって、numberとして0とか負の数が来たら誤動作するよね

ですから、まず、Numberが負、0、1、正で場合分けする必要がある。

また、上記のように場合分けしてある場合、ループの範囲は2からnumber/2-1。
更に、1回でも割り切れれば素数じゃないこと確定なので、ループは停止していいです。
最初に一度2でわれば偶数確定なので、ループの範囲を3からnumber/3-1にできて、ステップ間隔も2に出来てループの指すとが大幅に下がります。
    • good
    • 0

テストしてみましたが、合っているようですが?



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
    • good
    • 0

失礼しました。


約数の数を数えて判定する方法だったのですね。それなら、i=1でかまいません。
// 素数判定だけなら無駄のある方法ですが。


○ 「全角空白」が入っていたり、 } が全角だったりします
○ { } の対応がとれていません
○ divisible_counter を初期化している部分がありません。

これらは、ここに「書き込んだ」ときの問題なのでしょうか?
それとも、元のソースコードでそうなっているのでしょうか?


あと
> for文の部分がうまく機能しません。
質問するときは、どう「うまく機能しない」か書くようにしましょう。
エラーでコンパイルできないのか、○○と期待したのに××となった、とか。
そういう現象から、何が間違えているのかを予想するのが、プログラム修正の最初の一歩です。
    • good
    • 0

> for(i=1;i<=number;i++){      /*number:入力した値*/



このforで、 i は 1, 2, ... number と変化します。
では、
> surplus=number%i; /*surlus:余り*/
i = 1 のときの「余り」っていくつになるでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!