Php 发电机应该是懒惰的吗?
我试图用PHP计算第n个素数:Php 发电机应该是懒惰的吗?,php,Php,我试图用PHP计算第n个素数: function is_prime($n) { if ($n <= 1) { return false; } elseif ($n <= 3) { return true; } elseif (($n % 2 == 0) || ($n % 3 == 0)) { return false; } $i = 5; while ($i * $i <= $n
function is_prime($n) {
if ($n <= 1) {
return false;
} elseif ($n <= 3) {
return true;
} elseif (($n % 2 == 0) || ($n % 3 == 0)) {
return false;
}
$i = 5;
while ($i * $i <= $n) {
if (($n % $i == 0) || ($n % ($i + 2) == 0)) {
return false;
$i = $i + 6;
}
}
return true;
}
function prime_gen() {
for($x=0; $x< PHP_INT_MAX; $x++) {
if(is_prime($x)){
yield $x;
}
}
}
function nth_prime($n) {
for($i=0; $i<=$n; $i++) {
$ps = iterator_to_array(prime_gen());
}
return $ps[$n-1];
}
echo nth_prime(9);
函数为素数($n){
if($n迭代器到数组
迭代整个生成器,直到它耗尽并在数组中给出结果。生成器是“惰性的”,但您明确地打破了这一点,并强制对整个生成器进行求值。此外,您是在循环中进行此操作的。您几乎只需要去掉迭代器到数组
。更好的解决方案:
$nth = 0;
foreach (prime_gen() as $prime) {
if (++$nth >= $n) {
break;
}
}
return $prime;
iterator\u to\u array
对整个生成器进行迭代,直到其耗尽并在数组中给出结果。生成器为“惰性”,但您明确地打破了这一点,并强制对整个生成器进行求值。此外,您是在循环中进行此操作的。您几乎只需要去掉迭代器到数组
。更好的解决方案:
$nth = 0;
foreach (prime_gen() as $prime) {
if (++$nth >= $n) {
break;
}
}
return $prime;