goo*_*ing 2 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 == 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;
Run Code Online (Sandbox Code Playgroud)
PHP中最大的非溢出整数存储在常量中PHP_INT_MAX.
在PHP中,您将无法使用大于此值的整数.
要查看PHP的所有预定义常量,只需使用:
<?php
echo '<pre>';
print_r(get_defined_constants());
echo '</pre>';
?>
Run Code Online (Sandbox Code Playgroud)
PHP_INT_MAX可能有一个值2,147,483,647.
要处理PHP中任意精度的数量,请参阅GMP或BC Math PHP扩展.
特别是,您不需要测试每个除数是否为素数.
像下面这样的东西会更快.
while($i <= $x)
{
while ($x % $i == 0)
{
$sk = $i;
$x = $x / $i;
}
$i++;
}
Run Code Online (Sandbox Code Playgroud)
当$ i达到sqrt($ x)时你也可以停止你的外循环,如果你还没有找到除数,那么你知道$ x是素数.
| 归档时间: |
|
| 查看次数: |
2856 次 |
| 最近记录: |