Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php的最大素因子_Php_Prime Factoring - Fatal编程技术网

php的最大素因子

php的最大素因子,php,prime-factoring,Php,Prime Factoring,我用PHP编写了一个程序来寻找最大的素因子。我认为它是非常优化的,因为它加载速度非常快。但是,有一个问题:它不计算非常大的数字的主要因素。节目如下: function is_even($s) { $sk_sum = 0; for($i = 1; $i <= $s; $i++) { if($s % $i == 0) { $sk_sum++; } } if($sk_sum

我用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;
函数是偶数($s){
$sk_sum=0;

对于($i=1;$i好吧,每种语言都有它自己的限制(虽然通常是相同的),所以如果你超过了这个php的限制,你就不能再高了。最大整数是9E18。

你应该阅读和

特别是,您不需要测试每个除数是否都是素数

像下面这样的东西会更快

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

while($iPHP中最大的非溢出整数存储在常量
PHP\u INT\u MAX

在PHP中,您将无法处理大于此值的整数

要查看PHP的所有预定义常量,只需使用:

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

PHP\u INT\u MAX
的值可能为
2147483647


要在PHP中处理任意精度的数字,请参阅或PHP扩展。

我将
is_even
重命名为
is_prime
,并让它在函数的最后一行返回false。此外,您不必在该循环中包含$i=1或$i=$s,如果它可被任何其他数字整除,您只需返回false即可。Sur您可以扩展限制,只需编写一个类(或查找库)它将任意大的数字存储为小于MAX_INT的数字数组,并提供标准运算符来处理它们。请参阅我的答案,以获取指向GMP和BC数学扩展的链接,它们在PHP中处理任意大的数字。您建议的是一个很好的解决方法。但是,您不能超过给定的限制。