• ベストアンサー

素数であるかを判断するプログラムについて

C言語を学習していて「独習C」48ページの次のプログラムが分かりませんでした。 ~~~~~~~~~~~~~~~~ #include <stdlib.h> #include <stdio.h> int main(void) { int num, i, is_prime; printf("判定したい数を入力してください"); scanf("%d", &num); /*ここからがわかりません*/ is_prime = 1; for(i=2; i<=num/2; i=i+1) if((num%i)==0) is_prime = 0; if(is_prime==1) printf("素数です"); else printf("素数ではありません"); return 0; } ~~~~~~~~~~~~~~~ 私はこうなると考えています。どこが間違っているでしょうか? numが0のとき、2<=0となり、素数 numが1のとき、2<=0.5となり、素数でない numが2のとき、2<=1となり、素数でない numが3のとき、2<=1.5となり、素数でない

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.2

for(i=2; i<=num/2; i=i+1) は入力した数/2になるまでiを+1しながらループするという意味です (必要最小限回そうということで/2をしています) ここでは素数かどうかは判断していません。 実際に素数かどうかを判断しているのは、 if((num%i)==0) この部分で、で除算した時に余りがあるか無いかの判断になります ループに入る前に numが0のときis_prime = 1としておき、 除算した時に余りがあるか割る数を+1していきながらチェック 除算した時に余りがなければ(素数ではない)is_prime = 0となります numが0~3のとき、ループは即抜け、is_prime = 1なので素数

dindin_001
質問者

お礼

よく分かりました。 2で割っているのがなんなのか分からず迷ってました。回答ありがとうございます。

その他の回答 (2)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

皆さんの言われている通りですが 例えばnum=7とするとiは2と3でif文を実行します。・・素数と判定 次にnum=8とするとiは2と3と4でif文を実行します。・・非素数と判定。 なお蛇足ですがさらに効率アップを考えれば for(i=2; i<=sqr(num); i=i+1) とするのが普通です。

dindin_001
質問者

お礼

さらなるステップアップへの助言ありがとうございます。今後の参考とさせていただきます。

  • 0KG00
  • ベストアンサー率36% (334/913)
回答No.1

forは前判定なので、条件を満たしていないnum<4の場合は if((num%i)==0)・・・ を実行しません。ので、is_primeは1のまま。ゆえに素数。 ただし、numのチェック(1以下、負数も含め素数とはしない)をしていないので不十分ですね。入力データに条件がないですか?

dindin_001
質問者

お礼

早速の回答ありがとうございます。 そうですね。for文の入門のソースですから 細かいことは省略しているみたいです。 ありがとうございました。

関連するQ&A