PHP中的gmp_prob_prime函数是否有点缺乏光泽?

PHP中的gmp_prob_prime函数是否有点缺乏光泽?,php,gmp,Php,Gmp,下面是我使用gmp\u prob\u prime的一段代码。尽管我目前只测试10^6范围内的数字,但该函数经常“失败”我的快速测试,最终需要手动检查$NumberToTest的素性 gmp_prob_prime不是很健壮吗?直到我在10^9甚至10^12范围内,我才想到它会显示“可能的素数” 下面是正在调用的代码函数的片段: function IsPrime($DocRoot, $NumberToTest, $PowOf2) { // First a quick test... // 0 = c

下面是我使用gmp\u prob\u prime的一段代码。尽管我目前只测试10^6范围内的数字,但该函数经常“失败”我的快速测试,最终需要手动检查$NumberToTest的素性

gmp_prob_prime不是很健壮吗?直到我在10^9甚至10^12范围内,我才想到它会显示“可能的素数”

下面是正在调用的代码函数的片段:

function IsPrime($DocRoot, $NumberToTest, $PowOf2)
{
// First a quick test...
// 0 = composite
// 1 = probable prime
// 2 = definite prime
$Reps = 15;
$QuickTest = gmp_prob_prime($NumberToTest,$Reps);
if( $QuickTest == 0 )
        {
        return 0;
        }
if ( $QuickTest == 2 )
        {
        return 1;
        }

// If we get to here then gmp_prob_prime isn't sure whether the $NumberToTest is prime or not.
print "Consider increasing the Reps for gmp_prob_prime.\n";

// Find the sqrt of $NumberToTest;

。。。代码继续…

我在C++中直接调用<代码> MPZYPROBABLPRIMEOP时有相同的行为,但是我记不清下面的信息是否修复了() 函数:int-mpz_-probab_-prime_-p(常量mpz_-t n,int-reps)

确定n是否为素数。如果n肯定是素数,则返回2;如果n可能是素数(不确定),则返回1;如果n肯定是复合的,则返回0

该函数进行一些试验划分,然后进行一些Miller-Rabin概率素性测试。参数reps控制完成了多少这样的测试;更高的值将减少将合成返回为“可能是素数”的机会。25是一个合理的数字;然后,将复合数识别为概率小于2^(-50)的素数

Miller-Rabin和类似的测试可以更恰当地称为复合性测试。已知失败的数是复合数,但通过的数可能是素数,也可能是复合数。只有少数复合材料通过,因此那些通过的复合材料可能被认为是质数