Here is a simple demonstration code to fine prime possibilities. On my 64 bit Linux box I can only go until 61, larger numbers causes warnings due to the EXP number:
<?php
for ($idx = 0; $idx <= 61; $idx++) {
$pow = (gmp_strval(gmp_pow('2', $idx)) - 1);
$prop = gmp_prob_prime($pow);
if ($prop > 0) {
echo 'idx=' . $idx . "\n--------\n";
echo 'pow=' . $pow . "\n";
echo 'prop=' . $prop . "\n------\n";
}
}
?>
By 'pow' is the possible prime number.
gmp_prob_prime
(PHP 4 >= 4.0.4, PHP 5)
gmp_prob_prime — 数が"おそらく素数"であるかどうかを調べる
説明
int gmp_prob_prime
( resource
$a
[, int $reps = 10
] )この関数は、Miller-Rabin の予測テストを使用して、 その数が素数かどうかを調べます。
パラメータ
-
a -
素数かどうかを調べたい数。
GMP 数リソース、 あるいは数値に変換可能な数値形式の文字列。
-
reps -
repsの値 (デフォルトは 10) は、5 から 10 までです。より大きい値を指定すると、素数でない数を 「おそらく素数である」と誤認識する可能性が小さくなります。GMP 数リソース、 あるいは数値に変換可能な数値形式の文字列。
返り値
この関数が 0 を返す場合、a は確実に素数ではありません。
1 を返す場合、a は「おそらく」
素数です。2 を返す場合、a は確実に素数です。
例
例1 gmp_prob_prime() の例
<?php
// 明らかに素数ではありません
echo gmp_prob_prime("6") . "\n";
// おそらく素数です
echo gmp_prob_prime("1111111111111111111") . "\n";
// 明らかに素数です
echo gmp_prob_prime("11") . "\n";
?>
上の例の出力は以下となります。
0 1 2
roland at mxchange dot org ¶
2 years ago
