Переписал с учетом флагов,
$number = 20000;
$testArr = range (2, $number, false);
$simpleArr = [];
function isSimple ($num) {
for ($j = 2; $j < $num; $j++) {
if ($num % $j === 0)
return TRUE;
}
}
for ($i = 2; $i < $number; $i++) {
if (isSimple($i) === TRUE)
$testArr[$i] = FALSE;
if (!isset($testArr[$i]))
$simpleArr[] = $i;
}
var_dump($simpleArr);
И переделал обратно условие с %. Как оказалось, конструкция if (is_int ($temp / $simple[$i]) == TRUE) на ~10% медленнее операции сравнения на остаток (%). Думаю, как бы еще оптимизировать этот код традиционными методами. Двойной вложенный цикл дает большую нагрузку на процессор. Возможно ли решить задачу поиска простых чисел без использования двойного цикла? Пока что никаких других идей в голову не приходит...
PS: нашел алгоритм "решето Эратосфена", прирост скорости оказался в ~130 раз большим по сравнению с моим вариантом. Но хотелось бы сначала свой вариант дооптимизировать...
PPS: в учебниках пишут, что использовать цикл в функциях = плохой тон. Как в этом примере лучше поступить, вынести второй цикл за пределы функции, передавать в ней только условие проверки деления двух чисел на остаток?