数字をキーボードから入力し、その数字が素数がどうかを判断するプログラムを打ちたいのですが、うまくできません。
コンパイルはできるのですが…。
どなたか間違っているところを教えてください。
#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;
}
No.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;
}
注:インデントに全角空白を用いています。
タブに一括変換して下さい。
No.3
- 回答日時:
一般的な話になりますが、「うまくいかない」というのは、どう「うまくいかないか」をじっくり考えてみてください。
・素数は素数と判定するが、素数でないものを素数としてしまう
・素数を素数でないと、素数でないものを素数と判断する
・どんなものでも素数でないと判断する
のどれに該当するのかを確かめます。
そうすると、どこが悪いのかわかってきます。
この例だと、
・素数の定義はなんですか?
・それをもとに素数であることを(実際には素数でないことを)どのようにチェックしていますか
・素数であると(または素数でないと)判定したときに正しく印をつけていますか
の順で見ると何か見えてくると思います。
No.2
- 回答日時:
int a,b,indicator=0; // 素数である
if(a%b == 0){
indicator=1; // 素数ではない
}
約数が存在したら素数ではないということですね
No.1
- 回答日時:
>/* indicator=1.......素数でない
>indicator=0.......素数である */
aが1より大きいときに「どこで」indicaterに1をセットしていますか?見当たらないように思いますが・・。
>if(a%b == 0){
> indicator=0;
>}
何故「0」なんでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
勝率をプログラムに
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
cshの文字列操作(0埋め)
-
コマンドラインに出力した文字...
-
迷路作成のプログラミング
-
switch分のケースを範囲数?に...
-
printf で二進表示を行いたい。
-
三角形の判別
-
#include <stdio.h> #include <...
-
スレッドとメッセージキューに...
-
教えてください!!
-
C言語のプログラムにエラーが出...
-
インクリメント、デクリメント。
-
printfでSegmentation fault
-
10個出力で改行したいのですが...
-
正の実数Aを求めよまた、関数...
-
4の倍数を論理演算で表す。。
-
3つの整数が等しいかどうか調...
-
C++でfprintfやprintf,fopenな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
テキストカーソル位置の取得
-
4の倍数を論理演算で表す。。
-
cshの文字列操作(0埋め)
-
【C言語教えてください】sin波...
-
10個出力で改行したいのですが...
-
wsprintfの書式制御文字列につ...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
%P と %X の違い
-
C言語
-
strcmp
-
(C言語)めちゃくちゃな値にな...
-
コマンドラインに出力した文字...
-
スレッドとメッセージキューに...
-
printf( " %2d", p * q );
-
Visual Sutdio 2017 でのC言語...
-
defineで定数が置き換えられな...
おすすめ情報