プロが教えるわが家の防犯対策術!

初心者です
素数を生成するプログラムをネットから拾いました
順番に配列に格納されています

しかし、そこからランダムな素数の配列を作りたいんです

乱数を使用すると思うんですが、
調べてみても乱数を生成するものだけで
した

皆さん、よろしくお願いします

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int isprime( unsigned long long n );

int main( int ac, char *av[] )
{
unsigned long long n, n2, min_n, max_n, i;

/* コマンドラインから素数探索範囲を決定する */
if( ac < 3 )
return;
min_n = strtouq( av[1], NULL, 10 );
max_n = strtouq( av[2], NULL, 10 );

/* 探索範囲の数を調べる */
for( n = min_n; n <= max_n; n++ ) {
/* 2n + 1 を求める */
n2 = 2 * n + 1;

/* 素数かどうか調べる */
if( isprime( n2 ) )
printf( "%qu \n",n2);


}
}

int isprime( unsigned long long n )
{
unsigned long long i, n2, pn2;

/* 1は素数ではない */
if( n == 1 )
return( 0 );

/* 2以外で2で割り切れたら合成数 */
if( n != 2 && n % 2 == 0 )
return( 0 );

/* sqrt(n)以上の出来るだけ小さい値を求める */
pn2 = n2 = n;
while( n2 * n2 > n || n2 * n2 < n2 ) {
pn2 = n2;
n2 /= 2;
}
if( pn2 >= n )
n2 = n - 1;
else
n2 = pn2;

/* n2以下の奇数での剰余が0かどうか調べる */
for( i = 3; i <= n2; i += 2 ) {
if( n % i == 0 )
return( 0 );
}

/* 素数 */
return( 1 );
}


結果
3
5
7
11
13
17
19

A 回答 (1件)

提示された例では、7個の素数があります。


これらが、配列[0]~[6]に入っているとします。
このとき、当該配列の要素をシャッフルする方法は
いくつかあります。下記に一例を挙げます。

1)0から6までの、整数の乱数を2個発生させる。
2)発生させた2個の乱数(m, nとする)を当該配列の添え字と見立てて、
  [m]と[n]とを入れ替える。
3)前2項の処理を、所定の回数だけ繰り返す。
    • good
    • 0

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