• ベストアンサー

打ち込んだ数字が素数かどうか判断するプログラム

数字をキーボードから入力し、その数字が素数がどうかを判断するプログラムを打ちたいのですが、うまくできません。 コンパイルはできるのですが…。 どなたか間違っているところを教えてください。 #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; }

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答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; } 注:インデントに全角空白を用いています。   タブに一括変換して下さい。

その他の回答 (3)

回答No.3

一般的な話になりますが、「うまくいかない」というのは、どう「うまくいかないか」をじっくり考えてみてください。 ・素数は素数と判定するが、素数でないものを素数としてしまう ・素数を素数でないと、素数でないものを素数と判断する ・どんなものでも素数でないと判断する のどれに該当するのかを確かめます。 そうすると、どこが悪いのかわかってきます。 この例だと、 ・素数の定義はなんですか? ・それをもとに素数であることを(実際には素数でないことを)どのようにチェックしていますか ・素数であると(または素数でないと)判定したときに正しく印をつけていますか の順で見ると何か見えてくると思います。

takahir0O0
質問者

補足

どんなものでも素数でないと判断されてしまいます。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

int a,b,indicator=0; // 素数である if(a%b == 0){ indicator=1; // 素数ではない } 約数が存在したら素数ではないということですね

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>/* indicator=1.......素数でない >indicator=0.......素数である */ aが1より大きいときに「どこで」indicaterに1をセットしていますか?見当たらないように思いますが・・。 >if(a%b == 0){ >  indicator=0; >} 何故「0」なんでしょう?

関連するQ&A

  • このプログラムみてもらえますか?

    課題は標準入力から正整数aを読み込み、aが素数であるか否か判定するプログラムを作れ、です。 #include <stdio.h> int main(void) { int a,b,c; for(;;){ printf("正整数を入力して下さい。\n"); scanf("%d",&a); c=a%b; for(b=2;b=a-1;b=b+1){ if(c==0) printf("素数でない。\n"); break; } printf("素数です。\n"); break; return(0); } } コンパイルはできますが、実行すると9が「素数です」と表示されます^^; よろしくおねがいします。

  • 整数を3つ読み込み、一番大きいものを表示するプログラム

    3つが違う数であるとしてこうしたんですが、 #include<stdio.h> int main() {int a,b,c; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if(a>b && a>c){ printf("%d\n",a);} if(b>a && b>c){ printf("%d\n",b); if(c>a && c>b){ printf("%d\n",c); }}return 0;} で、コンパイルはできたんですが、実行できません。3つの数値を入力してもその一番大きい数が出てきません。ifの条件は間違ってはいないと思うんですがやはり、最大が2つあるときのことを考えないとできませんか?

  • 素数を判定するプログラム

    整数をひとつ入力して、それが素数かどうかを判定するプログラムを作ったのですが、素数でないものを入力しても「素数です」といわれます。 どうもfor文が評価されていないような気がしますが、原因がわかりません。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n = 2; int i; printf("1より大きい整数を入力してください: "); scanf("%d",&number); while (number <= 1) { printf("1より大きい整数を入力してください: "); scanf("%d",&number); } if (number == 2) { printf("%dは素数です\n",number); goto OUT; } else { for (; n == number - 1; n++) { i = number % n; if (i == 0) printf("%dは素数ではありません\n", number); if (i == 0) goto OUT; } } printf("%dは素数です\n", number); OUT: return 0; } どうかよろしくお願いします。

  • 素数プログラムの解読、

    C言語のプログラムで素数を求めるプログラムで、 //入力された数字が素数がどうかを求めるプログラムです。 #include<stdio.h> main() { int a,c; //aはそれが素数かどうか調べたい数字です。 printf("aに何か好きな整数をいれてください。\n"); printf("a="); scanf("%d",&a); c = 2; while ( a%c ){ c += c%2+1; printf("途中計算 %d\n",c); } if ( a > 1 && c == a ){ printf("素数です。\n"); }else{ printf("素数ちゃうよ。\n"); } } というのを作りました。このプログラムは 教えてgooの回答欄にあったものを自分で いじったものですが、 c = 2; while ( a%c ){ c += c%2+1; printf("途中計算 %d\n",c); } の部分が何をしているのかが、わかりません。 printf("途中計算 %d\n",c); は 何をしているかが解るかもしれないと思い 自分で付足しましたが、やっぱりわかりません。 だれか解る方お願いします。

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • 素数を判定するプログラム

    素数を判定するプログラムをC言語で作れという問題があったのですが、以下のものをビルドして実行したら途中で止まってしまいました。(例えば5と入力する)しかし、1以下の場合は正常にif文が評価されました。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n; int i; printf("1より大きい整数を入力してください: "); scanf("%d", &number); if (number <= 1) { printf("1より大きい整数を入力してください\a: "); scanf("%d", &number); } for (n = 2; n = number - 1; n++) { i = number % n; if (i = 0) { printf("%dは素数ではありません", number); break; } } printf("%dは素数です", number); return 0; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

  • if~else文の中にまたif~else文をいれるには。

     このプログラムを思うように実行したいのですが、できません。 コンパイルはできるのですが、警告が4つほど出て、結果も自分が思ってるのとは違います。 プログラムのどこを改善すべきか教えてください。 OSはWindows XPで、コンパイラはボーランドのフリーコンパイラを使用しています。 #include<stdio.h> int main(){ int a,b,c,d; printf("1か0を入力してください。\n"); scanf("%d",&a); if(a=0) { printf("2か3を入力してください。\n"); scanf("%d",&b); if(b=2){ printf("今まで合計は%dです。\n",a+b); } if(b=3){ printf("今まで合計は%dです。\n",a+b); } else { printf("指定した数字を入力して下さい。\n"); } } else if(a=1) { printf("あなたは%dを入力しました。\n",a); } else { printf("指定した数字を入力してください。\n"); } return 0; }

  • 素数判定の繰返し

    繰返し素数判定を行ない、CtrlーDで終了するプログラムをつくっています。 まず繰返しなしの素数判定プログラムを作り #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } return(0); } これはちゃんとできたのですがそれを繰り返すことができません。 #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); while((a=getchar())!=EOF){ if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } printf("自然数を入力:"); scanf("%d",&a); } printf("プログラムを終了します。\n"); return(0); } これは訳わからないことになっちゃいます。。。 どうしたらいいんでしょうか??

  • 文法エラー

    { int a; int b; printf("正の整数:"); scanf("%d",&b); for(a%b ==0) { break; } printf("は素数",b); if(a == b) { printf("です。\n"); } else if { printf("でない。\n"); } return 0; } else if の前のところがエラーとして報告されます。 どこが間違っているのか解りません。 よろしくお願いします。

  • Cのプログラム(初心者)

    #include<stdio.h> void main(void) { int a,b,c; printf("西暦で生まれた年を入力してください。\n"); scanf("%d",&a); printf("今の年を西暦で入力してください。\n"); scanf("%d",&b); c=b-a; if('0'<=c&&c<='23'){ printf("あなたは%d歳です。げんき。\n",c); } else if('24'<=c&&c<='40'){ printf("あなたは%d歳です。仕事盛り。\n",c); } else if('41'<=c&&c<='60'){ printf("あなたは%d歳です。まだいける。\n",c); } else if('61'<=c&&c<='99'){ printf("あなたは%d歳です。がんばれ。\n",c); } else{ printf("100歳以上なの?\n"); } } というプログラムを作っているのですが、うまく実行できません。間違いがあると思うのですが、それもよくわかりません。ビルドは成功するのですが、どの数字を入力しても「げんき」しか出てきません。 わかる人がいたら教えてください。 お願いします。

専門家に質問してみよう