- ベストアンサー
C言語のIF関数のアドバイスお願いします。
#include <stdio.h> int main(){ int x,i,div=0; printf("x="); scanf("%d",&x); for(i=1;i<=x;i++){ if(x%i == 0){ div++; } } if(ここがわかりません) printf("%dは素数です\n",x); else printf("%dは素数でありません\n",x); return 0; }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
C言語のIFは、関数ではなく、ステートメントです。 >if(ここがわかりません) 素数とは何ですか? 「1と、その数自身ででしか、割り切れない数」です。 1は、1と1ででしか割り切れませんから、素数です。質問のプログラムでは if(x%i == 0){ div++; } が実行されるのは1回だけなので、divが1になります。 2は、1と2ででしか割り切れませんから、素数です。質問のプログラムでは if(x%i == 0){ div++; } が実行されるのは2回だけなので、divが2になります。 4は、1と2と4で割り切れますから、素数ではありません。質問のプログラムでは if(x%i == 0){ div++; } が実行されるのは3回あるので、divが3になります。 5は、1と5ででしか割り切れませんから、素数です。質問のプログラムでは if(x%i == 0){ div++; } が実行されるのは2回だけなので、divが2になります。 6は、1と2と3と6で割り切れますから、素数ではありません。質問のプログラムでは if(x%i == 0){ div++; } が実行されるのは4回あるので、divが4になります。 これ以上は説明しなくても判りますね? 「divがどういう値になっていると素数なのか?」も判りますね? あとは、その条件式をif文に書くだけです。
その他の回答 (4)
- FAY
- ベストアンサー率49% (95/193)
これも蛇足なんですが・・・ 素数判定で自分自身までループする必要はありません。 x の 平方根の整数部の値まで回せば十分です。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
追記。 「1」は素数ではないので、divが1になってしまった時は「素数じゃない」と判定しなければいけませんでした。訂正します。 あと、蛇足ですが、 >for(i=1;i<=x;i++){ でループを回してdivをカウントアップする方法は「非常に良く出来ている」と言えます。 なぜなら、負数や0や1を入力した時に「素数を入力した時と異なる結果になる」からです。 他の回答で >素数は、1と自分自身では割り切れることが分かっているので、最初のfor文は、 >for( i=2; i<x; i++) { >でも良いかも知れません。 とありますが、これは「逆に複雑にしてしまう」ので駄目です。 やってみれば判りますが for( i=2; i<x; i++) { でループさせると、素数じゃない負数、0、1を入力した時と、素数の2、3、5、7を入力した時で、結果(divの値)が同じになってしまいます。 このループに変えてしまうと、素数じゃない負数、0、1を入力した時に、別個に判定が必要になり、逆に複雑になります。 オリジナルの for(i=1;i<=x;i++){ でループさせた場合、素数じゃない負数や0を入力するとdivが0に、素数じゃない1を入力するとdivが1に、素数の2、3、5、7を入力するとdivが2に、素数じゃない4や6を入力するとdivが3以上になります。 なので「divが2になったかどうか?」だけを判断すれば、素数じゃない負数や0や1も「素数じゃない」と判定され、負数や0や1を個別に判定する必要が無くなります。 そのため「1から自分自身までループを回す」と言うのが「非常に重要」になります。 そういう訳で「1から自分自身も含めてループするのは、非常に良く出来ている」と言えます。
- m-take0220
- ベストアンサー率60% (477/782)
1は素数ではないのでは? 「1より大きい整数で...」と定義されているはずです。 約数が2つの正の整数と考えれば、わかりやすいでしょう。1の約数は1つだけです。
- KEIS050162
- ベストアンサー率47% (890/1879)
既に回答が出ているので蛇足的ですが、 その1: 素数は、1と自分自身では割り切れることが分かっているので、最初のfor文は、 for( i=2; i<x; i++) { でも良いかも知れません。(但し、この場合、入力は1以下は受け付けない様にしないとなりませんが) こうすると後半のif文の条件はとてもシンプルになるはずです。 その2: 後半のif文の条件は、既に解説のある通りですが、試しに、print文でdivと入力したxを表示させてみて、色々な数値を入れてみれば、一発で理解出来ると思いますよ。 ご参考に。
お礼
具体的でわかりやすくやすかったです。ありがとうございました!!。