- ベストアンサー
打ち込んだ数字が素数かどうか判断するプログラム
数字をキーボードから入力し、その数字が素数がどうかを判断するプログラムを打ちたいのですが、うまくできません。 コンパイルはできるのですが…。 どなたか間違っているところを教えてください。 #include<stdio.h> int main ( void ) { int a,b,indicator=1; printf("正の整数:"); scanf("%d", &a ); /* indicator=1.......素数でない indicator=0.......素数である */ if(a<=1){ indicator=1; } else { for(b=2;b<=(a-1);b++) { if(a%b == 0){ indicator=0; } } if(indicator==1) { printf("%dは素数ではありません\n",a); } else if (indicator==0) { printf("%dは素数です\n",a); } } return 0; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>どなたか間違っているところを教えてください。 ★変数の宣言で、全てを「素数でない」としておいて、判定部分でも「素数でない」ものだけを抽出しているからです。 >どんなものでも素数でないと判断されてしまいます。 質問者様のソースを実行すると、判断は「逆」になるだけで・・。 111 ( 3 X 37 ) を入れると「素数です」となりますよ。 -------------------------------------------------------- ・ else を省いて書き直してみました。 ・判断部分で、「でない」ものを抽出するのだから・・・(▼) -------------------------------------------------------- #include <stdio.h> int main( void ) { int a, b, c, indicator; printf( "正の整数:" ); scanf( "%d", &a ); // indicator = 1.......素数でない(◆) // indicator = 0.......素数である indicator = 0; // 一旦、全てを「である」(▼) for( b = 2; b <= ( a - 1 ); b++ ){ if( 0 == ( a % b ) ){ // 「でない」の判定(◆) indicator = 1; // ≠0 c = b; // break; // 「必須」ではない。「 c 」のみに影響 } } if( indicator == 1 ) printf( "%dは素数ではありません(%d)\n", a, c ); if( indicator == 0 ) printf( "%dは素数です\n", a ); return 0; } 注:インデントに全角空白を用いています。 タブに一括変換して下さい。
その他の回答 (3)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
一般的な話になりますが、「うまくいかない」というのは、どう「うまくいかないか」をじっくり考えてみてください。 ・素数は素数と判定するが、素数でないものを素数としてしまう ・素数を素数でないと、素数でないものを素数と判断する ・どんなものでも素数でないと判断する のどれに該当するのかを確かめます。 そうすると、どこが悪いのかわかってきます。 この例だと、 ・素数の定義はなんですか? ・それをもとに素数であることを(実際には素数でないことを)どのようにチェックしていますか ・素数であると(または素数でないと)判定したときに正しく印をつけていますか の順で見ると何か見えてくると思います。
- php504
- ベストアンサー率42% (926/2160)
int a,b,indicator=0; // 素数である if(a%b == 0){ indicator=1; // 素数ではない } 約数が存在したら素数ではないということですね
- shimix
- ベストアンサー率54% (865/1590)
>/* indicator=1.......素数でない >indicator=0.......素数である */ aが1より大きいときに「どこで」indicaterに1をセットしていますか?見当たらないように思いますが・・。 >if(a%b == 0){ > indicator=0; >} 何故「0」なんでしょう?
補足
どんなものでも素数でないと判断されてしまいます。