私は、考えられる最速の素数ジェネレーターを作成するアルゴリズムを練習しています。これは私が最新の作業コードです:
$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 を返します。
一体何が起こっているのですか?