• ベストアンサー

反復処理

入力した数値が素数であるかどうかを調べるプログラムを教えて下さい。 それと、0から1000までの乱数値を1つ作り、その数をあてさせるゲームはどうなるのでしょう?xを入力して、nより大きいか小さいか表示して、x=nになるまでくりかえし入力するのですが。

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

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんばんは 下記のprime()関数に調べたい数値を入れれば、返り値が0なら素数では無い、1なら素数となります。 int prime(int n) {   int i ;   if ( n < 2 || n%2 == 0 ){     return 0 ;   }   for (i=3 ;i*i<=n ;i+=2){     if ( n%i == 0 ){       return 0 ;     }   }   return 1 ; } 乱数のゲームですが、 #include <stdio.h> #include <stdlib.h> #include <time.h> main() [   int n,x ;   time(&t);   srand(t%65536);   n = rand()%1001 ;   do {     scanf("%d",&x);     if ( n < x ){     } else if ( n > x ){     }   } while ( n != x ); } といった感じでしょうか。

inversezero
質問者

お礼

なかなか難しいものですね。どうもありがとうございました。

その他の回答 (1)

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.2

素数判定 int is_prime(int n) { int i=1; if(n<2)return 0; //負の数、0、1は素数ではない if((n&1)==0) return 0; //2の倍数かの判定最下位ビットが0なら2の倍数。 while(sqrt(n)>i) { i=i+2; if((n%i)==0) return 0; } return -1; } 何も考えてない素数判定の例です。 2の倍数でないことを確認してから3以上の奇数でで割れるか確認してるだけです。 int型で最近のPCなら特にこれで問題はありません。 もし大きな数を扱うのであれば素数判定法がいくつかあるのでそちらを調べたほうがいいでしょう。 乱数関連はあまり詳しくないので回答を控えさせていただきます。

inversezero
質問者

お礼

親切な回答ありがとうございました。

関連するQ&A

専門家に質問してみよう