這是一個簡單的程序,用於查找在稍後階段檢查數字劃分的素數。PHP代碼在處理大量數據時需要很多時間執行
我試圖通過初始化該數字的整數平方根來縮短它的複雜性。但仍然需要花費很多時間來執行腳本。什麼樣的改變,我可以實現我的代碼以減少執行時間(我已經設置最長執行時間爲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>";
}
}
}
編輯就評論道線開方,因爲這似乎是正確的。但仍然需要很多時間。
數字有多大?每個人都會在某種程度上被優秀的代碼所感染,但如果它的大小有限,那麼緩存頭幾千個素數可能會更快,而不是每次計算它們。而且,因爲它們不會改變,所以你不需要第一次對它們進行整理,因此不用緩存就可以讀取「hardcode」。 – Nanne 2013-03-03 09:02:41
@Nanne你的意思是我首先把它們全部放在一個數組中,然後對數字進行除法運算?請澄清一下 – swapnesh 2013-03-03 09:09:17
@swapnesh部門?沒有。我的意思是你把所有素數放入一個數組中。然後你有一系列素數,你可以像在這裏做的那樣迴應絕對值。不需要做計算。但是這將有助於瞭解您需要解決的實際問題是什麼? – Nanne 2013-03-03 09:30:46