• ベストアンサー

素数を判定するプログラム

素数を判定するプログラムを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; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

> n = 2; n == number - 1; n++ にしても、真偽を取り違えていませんか。 また n = 2; n != number - 1; n++ にしても、number = 2 だったら、どうなるでしょう。 また、自然数はそれ +1 の 1/2 までの自然数 (1 を除く) で一度も割り切れない場合は素数なので、対象自然数の -1 数まで調べる必要はありません (1/2 数より大きな約数は (対象自然数以外に) ない)。

cermet
質問者

お礼

ご回答ありがとうございますm(_ _)m 素数の判定法もよくわからなかったのでとても参考になりました

その他の回答 (5)

回答No.6

  >また、自然数はそれ +1 の 1/2 までの自然数 (1 を除く) で一度も割り切れない場合は >素数なので、対象自然数の -1 数まで調べる必要はありません (1/2 数より大きな約数は > (対象自然数以外に) ない)。  平方根以下を調べればOKです。  

cermet
質問者

お礼

わかりました~。ありがとうございましたm(_ _)m

回答No.4

#1です。 おぉ本当だ・・・見落としていました。失礼しました。 >このプログラムでは5を入力したら、そのまま「5は素数です」と出て終了すると思いますが。 これは間違いです。確かに終了しないですね・・・。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

for の条件の所 n = number -1 は n への代入になっています。 number が1 でない場合には、常に真になり無限ループします。 n == number -1 か n < number とでもすれば良いんじゃないかと思います。 あと同じく if (i = 0) { の条件部分は i へ 0 をセットしています。 C での同値判定は、 「=」 ではなく「==」です。

cermet
質問者

お礼

ご回答ありがとうございますm(_ _)m ==にしなかったのは初歩的ミスですねorz まだまだ練習不足です・・・

回答No.2

止まらないようにするだけならFor文とif文がおかしいですよ。 if(i==0)等とやらないと、比較ではなく代入してしまいます。 それでも正常には動きませんでした。(素数判定しないかも?)

cermet
質問者

お礼

ご回答ありがとうございますm(_ _)m ==にしなかったのは初歩的ミスですねorz 練習不足です・・・

回答No.1

「途中で止まってしまった」とは、どんな状態になって、何をみて「途中で止まった」判断したのでしょう? このプログラムでは5を入力したら、そのまま「5は素数です」と出て終了すると思いますが。 少なくとも for (n = 2; n = number - 1; n++) { がおかしいです。

cermet
質問者

お礼

ご回答ありがとうございますm(_ _)m =ではなく==ですね 初歩的ミスですorz

関連するQ&A