電子書籍の厳選無料作品が豊富!

素数を判定するプログラムを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;

}
自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

A 回答 (6件)

> n = 2; n == number - 1; n++



にしても、真偽を取り違えていませんか。
また

n = 2; n != number - 1; n++

にしても、number = 2 だったら、どうなるでしょう。

また、自然数はそれ +1 の 1/2 までの自然数 (1 を除く) で一度も割り切れない場合は素数なので、対象自然数の -1 数まで調べる必要はありません (1/2 数より大きな約数は (対象自然数以外に) ない)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/22 23:29

 


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

 平方根以下を調べればOKです。
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/22 23:27

#1です。



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

for の条件の所


n = number -1
は n への代入になっています。
number が1 でない場合には、常に真になり無限ループします。
n == number -1

n < number
とでもすれば良いんじゃないかと思います。
あと同じく
if (i = 0) {
の条件部分は i へ 0 をセットしています。
C での同値判定は、 「=」 ではなく「==」です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/22 23:31

止まらないようにするだけならFor文とif文がおかしいですよ。


if(i==0)等とやらないと、比較ではなく代入してしまいます。

それでも正常には動きませんでした。(素数判定しないかも?)
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/22 23:32

「途中で止まってしまった」とは、どんな状態になって、何をみて「途中で止まった」判断したのでしょう?



このプログラムでは5を入力したら、そのまま「5は素数です」と出て終了すると思いますが。


少なくとも
for (n = 2; n = number - 1; n++) {
がおかしいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/22 23:33

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