我正在练习创建我能想到的最快的素数生成器的算法。这是我最新的工作代码:
$p = array();
function isPrime($i) {
global $p;
$s = $i / 2;
foreach ($p as $n) {
if ($n >= $s) return true;
if ($i % $n == 0) return false;
}
return true;
}
$start = microtime(true);
for ($i = 3, $k = 20000; $i <= $k; $i += 2) {
isPrime($i) and $p[] = $i;
}
echo(microtime(true) - $start);
但后来我意识到我可以优化$s = $i / 2;
到$s = sqrt($i);
,这将测试更少的数字。当我测试时,代码失败并将每个数字都作为质数。本质上 que sqrt 失败并且总是返回 true。
到底发生了什么?