- var_dump: documentation ( source)
- array_slice: documentation ( source)
- range: documentation ( source)
- next: documentation ( source)
- current: documentation ( source)
<?php
function sieve($limit) {
if ($limit < 3) {
if ($limit < 2) {
return [];
}
return array_slice([2, 3], 0, $limit - 1);
}
$nums = range(3, $limit - !($limit % 2), 2);
for ($p = current($nums); $p; next($nums)) {
for ($n = $p; $n < $limit; $n += $p) {
unset($nums[$n]);
}
}
return $nums;
}
var_dump(sieve(20));