アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

#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;
}

A 回答 (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;
}
注:インデントに全角空白を用いています。
  タブに一括変換して下さい。
    • good
    • 0

一般的な話になりますが、「うまくいかない」というのは、どう「うまくいかないか」をじっくり考えてみてください。



・素数は素数と判定するが、素数でないものを素数としてしまう
・素数を素数でないと、素数でないものを素数と判断する
・どんなものでも素数でないと判断する

のどれに該当するのかを確かめます。
そうすると、どこが悪いのかわかってきます。

この例だと、

・素数の定義はなんですか?
・それをもとに素数であることを(実際には素数でないことを)どのようにチェックしていますか
・素数であると(または素数でないと)判定したときに正しく印をつけていますか

の順で見ると何か見えてくると思います。

この回答への補足

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

補足日時:2008/05/19 19:58
    • good
    • 0

int a,b,indicator=0; // 素数である



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

>/* indicator=1.......素数でない


>indicator=0.......素数である */

aが1より大きいときに「どこで」indicaterに1をセットしていますか?見当たらないように思いますが・・。


>if(a%b == 0){
>  indicator=0;
>}

何故「0」なんでしょう?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!