- ベストアンサー
繰り返し素数判定プログラムとは?
- 繰り返し素数判定プログラムは、自然数が素数であるかどうかを判定するプログラムです。
- 通常の素数判定プログラムを繰り返し実行し、Ctrl-Dで終了させることができます。
- 繰り返し素数判定プログラムの作成方法やその使い方について詳しく解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#include<stdio.h> int main(void) { int a,i; // for文で無限ループを作る for(;;){ printf("自然数を入力:"); // // scanfはCTRL-DでEOFを返してくるので、ここでそれを判定し // EOFであればbreakによりforループを抜ける。 // if( scanf("%d",&a) == EOF ){ break; } // // 後はオリジナルのままです // 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); } } // ここがforループの終端 // // CTRL-Dでは改行されないので、文頭に改行コードを入れています。 // printf("\nプログラムを終了します。\n"); return(0); }
その他の回答 (1)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・素因数分解するアルゴリズムを整理した方が良い。 (1)素因数分解する『数』を 2、3、4…と順番に割っていきます。 (2)割った余りが 0 以外ならば素因数の要素ではないと判定します。 割る数に +1 してから(1)へジャンプ、繰り返します。 (3)割り切れたらばその数が素因数の要素になります。 現在の素数でいくつ割れるかのカウンタに +1 して(2)へジャンプ、繰り返します。 (4)上記の(1)~(3)を繰り返します。そして、割った商が 1 になったら繰り返しを抜けます。 ・ちょっと説明が下手ですのでサンプルを乗せておきます。 サンプル: int main( void ) { int a; ←自然数 int i; ←割る素数 int exp; ←割れた素数のカウンタ値 printf( "自然数を入力:" ); scanf( "%d", &a ); : /* 2 以下の処理を記述(マイナス値、1の処理) */ : // 素因数分解を開始 printf( "素因数分解⇒" ); i = 2; ←素数の最初である 2 から計算開始 do { exp = 0; while ( (a % i) == 0 ){ ←割り切れなくなるまで繰り返す a /= i; exp++; ←割り切れた回数をカウント } if ( exp > 0 ){ printf( "%d^%d", i, exp ); ←表示(2*2*2 は 2^3 と表現) if ( a > 1 ){ printf( " * " ); ←掛け算の * を表示 } } i++; ←割る素数をインクリメント } while ( a != 1 ); ←割った商が 1 以上なら繰り返す printf( " です。\n" ); return 0; } その他: ・サンプルでは最初に自然数を入力してその数を素因数分解して結果を表示します。 720 の素因数分解は 『素因数分解⇒2^1 * 3^1 * 4^1 * 5^1 です。』 と表示されます。 ・繰り返し部分と Ctrl-D で終了する部分は horininnna さんがプログラムして下さい。 ・以上。
お礼
素因数分解ではなくて素数判定なんです。。。 丁寧に説明していただきましたが申し訳ありません(^_^;)
お礼
ありがとうございます!! できました(^0^)