PHP Conference Japan 2024

gmp_prob_prime

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

gmp_prob_prime檢查數字是否「可能是質數」

說明

gmp_prob_prime(GMP|int|string $num, int $repetitions = 10): int

此函數使用 Miller-Rabin 概率性檢驗來檢查一個數是否為質數。

參數

num

要檢查是否為質數的數字。

一個 GMP 物件、一個 int 或一個可以被解釋為數字的 string,其遵循與在 gmp_init() 中使用字串並啟用自動基數檢測(即 base 等於 0 時)相同的邏輯。

repetitions

repetitions 的合理值介於 5 到 10 之間(預設為 10);值越高,非質數被誤判為「可能是」質數的機率就越低。

一個 GMP 物件、一個 int 或一個可以被解釋為數字的 string,其遵循與在 gmp_init() 中使用字串並啟用自動基數檢測(即 base 等於 0 時)相同的邏輯。

返回值

如果此函數返回 0,則 num 肯定不是質數。如果返回 1,則 num 「可能是」質數。如果返回 2,則 num 肯定是質數。

範例

範例 #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

新增註釋

使用者貢獻的註釋 1 則註釋

4
florin dot ciuica at yahoo dot com
10 年前
<?php
$max
= 2147483647;

$primesFound = 0;
$probablePrimes = 0;

for (
$x = 1; $x <= $max; $x++) {
$primeStatus = gmp_prob_prime($x);
if (
$primeStatus == 1) {
$probablePrimes++;
} else if (
$primeStatus == 2) {
$primesFound++;
}
}
echo
"找到的質數總數: " . $primesFound . " 介於 1 和 " . $max . " 之間。此區間內的可能質數: " . $probablePrimes;
?>

根據程式碼,得到以下結果

1 - 100000 - 找到的確定質數: 9592,可能質數: 0
1 - 1000000 - 找到的確定質數: 78498,可能質數: 0
1 - 10000000 - 找到的確定質數: 78498,可能質數: 586081
1 - 100000000 - 找到的確定質數: 78498,可能質數: 5682957
1 - 1000000000 - 找到的確定質數: 78498,可能質數: 50769036
1 - 2147483647 - 找到的確定質數: 78498,可能質數: 105019067
To Top