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()がtrueと評価されるのか理解できませんか?

4

3 に答える 3

4

こちらのバグリストをご覧ください

%は、2 ^ 31(32ビット)または2 ^ 63(64ビット)を超える数値では機能しません。代わりにBCMODを使用してください。

于 2010-03-02T19:47:16.553 に答える
0

私はそれを誤解しているかもしれませんが、モジュロは除算の残りを与えるので、例えば600851475143/3は200283825047残り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 に答える