Проблема с модулем PHP

У меня проблема, я пытаюсь вычислить, что самое низкое простое число, но я не понимаю результат, который дает PHP.

Если у меня есть этот номер

$number = 600851475143; 

Тогда модуль I:

 $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 () оценивает значение true?

    Используя PHP 5.2.8, он не работает, как описано в вопросе. Похоже, что оператор modulo не работает с большими целыми числами. Вы должны использовать 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

    См. Этот список ошибок здесь

    % не работает для чисел более 2 ^ 31 (32-разрядный) или 2 ^ 63 (64-разрядный). Вместо этого используйте BCMOD .

    Возможно, я ошибаюсь, но modulo дает вам остальную часть деления, так что, например, 600851475143/3 – 200283825047 rest 2, и это то, что он возвращает.