2

最大の素因数を見つけるプログラムを PHP で作成しました。読み込みがかなり速いので、かなり最適化されていると思います。ただし、問題があります。非常に大きな数の素因数はカウントされません。プログラムは次のとおりです。

function is_even($s) {      
    $sk_sum = 0;        
    for($i = 1; $i <= $s; $i++) {           
        if($s % $i == 0) { $sk_sum++; }         
    }   
    if($sk_sum == 2) {          
        return true;            
    }          
}

$x = 600851475143; $i = 2; //x is number    
while($i <= $x) {   
    if($x % $i == 0) {
        if(is_even($i)) {
            $sk = $i; $x = $x / $i;
        }
    }
    $i++;   
}
echo $sk;
4

3 に答える 3

7

PHP のオーバーフローしない最大の整数は、定数 に格納されPHP_INT_MAXます。

PHP では、この値より大きい整数を扱うことはできません。

PHP の定義済み定数をすべて表示するには、次のコマンドを使用します。

<?php
echo '<pre>';
print_r(get_defined_constants());
echo '</pre>';
?>

PHP_INT_MAXおそらく の値を持っています2,147,483,647

PHP で任意精度の数値を処理するには、GMPまたはBC Math PHP 拡張機能を参照してください。

于 2010-05-19T18:32:19.520 に答える
6

Prime testingSifyingについて読む必要があります。

特に、各除数が素数かどうかをテストする必要はありません。

次のようなものはより高速になります。

while($i <= $x) 
{
    while ($x % $i == 0)
    {
        $sk = $i;
        $x = $x / $i;
    }
    $i++;
}

$i が sqrt($x) に達したときに外側のループを停止することもできます。除数がまだ見つからない場合は、$x が素数であることがわかります。

于 2010-05-19T18:30:51.293 に答える
0

まあ、すべての言語には独自の (通常は同じですが) 制限があるため、この php の制限を超えると、それ以上高くなることはできません。最大整数は 9E18 です。

于 2010-05-19T18:30:40.420 に答える