数字をキーボードから入力し、その数字が素数がどうかを判断するプログラムを打ちたいのですが、うまくできません。
コンパイルはできるのですが…。
どなたか間違っているところを教えてください。
#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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf で二進表示を行いたい。
-
10個出力で改行したいのですが...
-
コマンドラインに出力した文字...
-
ブラックジャック
-
C言語で、「自然数nを入力し、n...
-
error C2143: 構文エラー : ';'...
-
scanfに文字が入力されたときに...
-
4の倍数を論理演算で表す。。
-
縦の棒グラフ
-
パスカルの三角形についてのCプ...
-
(C言語)めちゃくちゃな値にな...
-
ピラミッド表示プログラム。
-
C言語 ツェラーの公式を使った...
-
CTRL+Dでループを抜けるには
-
勝率をプログラムに
-
Visual Sutdio 2017 でのC言語...
-
%P と %X の違い
-
printf( " %2d", p * q );
-
C言語 プログラミング ごめんな...
-
printf()文の書式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報