【发布时间】:2013-09-04 11:03:48
【问题描述】:
这是一个查找素数的简单程序,用于在后期检查数字的除法。
我试图通过最初取数字的整数平方根来缩短它以分解复杂性。但是执行脚本仍然需要很长时间。我可以在我的代码中实现哪些其他更改以减少执行时间(我已经将最大执行时间设置为 5 分钟)
<?php
error_reporting(E_ALL);
$num = 600851475143;
//$sqrt_num = (int)sqrt($num);
for( $j = 2; $j <= $num; $j++ )
{
for( $k = 2; $k < $j; $k++ )
{
if( $j % $k == 0 )
{
break;
}
}
if( $k == $j )
{
//echo "Prime Number : ", $j, "<br>";
if( $num % $j == 0 )
{
echo "Prime number : ", $j, "<br>";
}
}
}
编辑刚刚评论了 sqrt 的行,因为这似乎是正确的..但循环仍然需要很多时间。
【问题讨论】:
-
数字可以有多大?每个人都会对这里的好代码有某种感觉,但如果它的大小有限,那么只缓存前几千个素数而不是每次都计算它们可能会更快。而且由于它们不会改变,你真的不需要第一次计算它们,所以不要缓存,而是读取“硬代码”。
-
@Nanne 你的意思是我首先将它们全部放在一个数组中,然后将除法应用于数字?请再澄清一点
-
@swapnesh 部门?不。我的意思是你把所有素数放在一个数组中。然后你有一个质数数组,你可以像在这里做的那样回显。无需进行计算。但了解您需要解决的实际问题是什么会有所帮助?
-
@Nanne 使用此代码我的浏览器挂起..但是在提供少量数字时它工作正常
-
@MarkoD 你为什么这么认为? “虽然我知道你没有回答我”
标签: php for-loop execution largenumber prime-factoring