3

我有一个问题,我试图计算一个数字的最低质数,但我不明白 PHP 给我的结果。

如果我有这个号码

 $number = 600851475143;

然后我对其进行模数:

$primes = array( 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97);

    foreach($primes as $key=>$value) {    
        if($number % $value == 0 ) {echo $value; break; }
    }

为什么 $value = 3?如果 $value = 3,这意味着 600851475143 / 3应该是一个整数,但它不是。所以我不明白为什么 if() 评估为真?

4

3 回答 3

4

在此处查看此错误列表

% 不适用于 2^31(32 位)或 2^63(64 位)以上的数字。请改用BCMOD

于 2010-03-02T19:47:16.553 回答
0

我可能会误解它,但是模数给了你一个除法的其余部分,所以例如 600851475143 / 3 是 200283825047 rest 2 这就是它给你的。

于 2010-03-02T19:42:38.013 回答
0

使用 PHP 5.2.8,它会失败,如问题中所述。似乎模运算符不适用于大整数。您应该考虑使用bc_mod(具有任意精度的模数):

<?php

$number = 600851475143;

$primes = array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97);

    foreach($primes as $key=>$value)
    {    
        if($number % $value == 0 ) {echo $value."<br/>"; }
        if(bcmod($number, $value) == 0) {echo "bcmod ".$value."<br/>"; }
    }

?>

上面的代码打印:

3

29

bcmod 71

于 2010-03-02T19:47:09.350 回答