dポイントプレゼントキャンペーン実施中!

2以上120以下の素数を全て求めて表示するプログラムを書きなさい。
素数か否かの判定には以下のアルゴリズム[処理手順]
(2 <= n <= 120のときのみ有効)を用いなさい。
i) nが2, 3, 5, 7, 11のうちのどれかと等しければNは素数
ii) nが2, 3, 5, 7, 11の全てに対して割切れなければNは素数
iii) それ以外(iもiiも不成立)のとき、Nは素数ではない。
*) 2, 3, 5, 7, 11は最初に出力してしまい、
n=12から120までをfor文のなかで判定すればよい。

というC言語の課題です。
自分でプログラムを作ったのですが、うまくできません・・。
if文が働いてないようなのですが、どこが間違っているのでしょうか?


#include <stdio.h>

int main(void)
{
int i;
printf("2\n");
printf("3\n");
printf("5\n");
printf("7\n");
printf("11\n");
for (i=12;i<=120;i++){

if (i%2!=0 || i%3!=0 || i%5!=0 || i%7!=0 || i%11!=0){
printf("%d\n",i);
}
else{
printf("");
}
}
printf( "\n" );

return 0;

}

A 回答 (3件)

ii) nが2, 3, 5, 7, 11の『全て』に対して割切れなければNは素数


ですから ifの条件設定がおかしいですよ

たとえば 12の場合

( 12 % 2 ) != 0 ... FALSE
( 12 % 3 ) != 0 ... FALSE
( 12 % 5 ) != 0 ... TRUE
( 12 % 7 ) != 0 ... TRUE
( 12 % 11 ) != 0 ... TRUE

ということは 12は 2と3の倍数ということになります
したがって『素数ではない』と判断出来ます
||演算子でこの判断が可能なのでしょうか

蛇足
12は 2と3の倍数である事は明らかなので 13から検査すればいい
ループカウントアップを1にするより 2としてやれば偶数のチェックはしなくて済む
ループの終了条件も n<=120 120は当然偶数なので2の倍数であるから
『<=』の『=』は不要かも
    • good
    • 0
この回答へのお礼

ifの条件設定が変だったんですね・・
ありがとうございます!解決しました。

お礼日時:2008/05/21 23:08

(へ) 理屈的には「偶数は iii) に落ちるので最初から無視した」といえばいいと思います>#2.


もっといえば, 120以下の素数を見付けるなら 11 で割切れるかどうかの判定も不要だけど (課題としては) まずいんだろうなぁ.
    • good
    • 0
この回答へのお礼

11で割り切れる判定もいらないんですね・・
ただ手順通りにと指定されているので
今回はこのまま提出します。
ありがとうございました!

お礼日時:2008/05/21 23:12

|| ではなく && ですね。


よく条件を考えてください。

まあ、課題が妥当かどうかは別として、課題でしてされているんで、
奇数だけとか、13からとかはルール違反になるんでしょうね。
    • good
    • 0
この回答へのお礼

&&でやってみたところ、うまくできました!
ありがとうございます!
一応課題の通り12からにして提出します。

お礼日時:2008/05/21 23:10

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