- ベストアンサー
素数を判定するプログラム
素数を判定するプログラムをC言語で作れという問題があったのですが、以下のものをビルドして実行したら途中で止まってしまいました。(例えば5と入力する)しかし、1以下の場合は正常にif文が評価されました。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n; int i; printf("1より大きい整数を入力してください: "); scanf("%d", &number); if (number <= 1) { printf("1より大きい整数を入力してください\a: "); scanf("%d", &number); } for (n = 2; n = number - 1; n++) { i = number % n; if (i = 0) { printf("%dは素数ではありません", number); break; } } printf("%dは素数です", number); return 0; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> n = 2; n == number - 1; n++ にしても、真偽を取り違えていませんか。 また n = 2; n != number - 1; n++ にしても、number = 2 だったら、どうなるでしょう。 また、自然数はそれ +1 の 1/2 までの自然数 (1 を除く) で一度も割り切れない場合は素数なので、対象自然数の -1 数まで調べる必要はありません (1/2 数より大きな約数は (対象自然数以外に) ない)。
その他の回答 (5)
- yaemon_2006
- ベストアンサー率22% (50/220)
>また、自然数はそれ +1 の 1/2 までの自然数 (1 を除く) で一度も割り切れない場合は >素数なので、対象自然数の -1 数まで調べる必要はありません (1/2 数より大きな約数は > (対象自然数以外に) ない)。 平方根以下を調べればOKです。
お礼
わかりました~。ありがとうございましたm(_ _)m
- Chronos198
- ベストアンサー率30% (105/349)
#1です。 おぉ本当だ・・・見落としていました。失礼しました。 >このプログラムでは5を入力したら、そのまま「5は素数です」と出て終了すると思いますが。 これは間違いです。確かに終了しないですね・・・。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
for の条件の所 n = number -1 は n への代入になっています。 number が1 でない場合には、常に真になり無限ループします。 n == number -1 か n < number とでもすれば良いんじゃないかと思います。 あと同じく if (i = 0) { の条件部分は i へ 0 をセットしています。 C での同値判定は、 「=」 ではなく「==」です。
お礼
ご回答ありがとうございますm(_ _)m ==にしなかったのは初歩的ミスですねorz まだまだ練習不足です・・・
- silverbear
- ベストアンサー率25% (163/639)
止まらないようにするだけならFor文とif文がおかしいですよ。 if(i==0)等とやらないと、比較ではなく代入してしまいます。 それでも正常には動きませんでした。(素数判定しないかも?)
お礼
ご回答ありがとうございますm(_ _)m ==にしなかったのは初歩的ミスですねorz 練習不足です・・・
- Chronos198
- ベストアンサー率30% (105/349)
「途中で止まってしまった」とは、どんな状態になって、何をみて「途中で止まった」判断したのでしょう? このプログラムでは5を入力したら、そのまま「5は素数です」と出て終了すると思いますが。 少なくとも for (n = 2; n = number - 1; n++) { がおかしいです。
お礼
ご回答ありがとうございますm(_ _)m =ではなく==ですね 初歩的ミスですorz
お礼
ご回答ありがとうございますm(_ _)m 素数の判定法もよくわからなかったのでとても参考になりました