Это простая программа для поиска простых чисел, которая проверяет деление числа на более позднем этапе.
Я попытался сократить его, сначала взяв целочисленный квадратный корень из числа, чтобы разбить сложность. Но все же выполнение скрипта занимает очень много времени. Какие еще изменения я могу внести в свой код, чтобы уменьшить время выполнения (я уже установил максимальное время выполнения на 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>";
}
}
}
EDIT Только что прокомментировал строку для sqrt, так как она кажется правильной... но цикл все равно занимает много времени.
for( $k = 2; $k < $j; $k++ )
напишите$cond = sqrt($j); for( $k = 2; $k <= $cond; $k++ )
и вместоif( $k == $j )
напишитеif( $k > $cond )
. И снимитеif( $num % $j == 0 )
чек. Я тестировал, и это работает. Я удалю свои предыдущие комментарии, так как они сейчас не нужны - person Marko D   schedule 03.03.2013