您好我希望下面的循环生成一个低于1000的随机素数。但是只生成变量$ i和变量$ finish应该允许while循环在找到第一个素数后停止并且如果数字不是素数,它应该随机生成一个新的$ i变量,并检查它是否是一个素数,直到找到第一个素数。
<html>
<body>
<?php
$finish="a";
while($finish = "a") {
$i = (mt_rand(0,999));
$counter = 0;
for($j = 1; $j <= $i; $j++) { //all divisible factors
if($i % $j == 0) {
$counter++;
}
//prime requires 2 rules ( divisible by 1 and divisible by itself)
if($counter == 2){
print $i." is Prime <br/>";
$finish = "b";
}
}
}
?>
</body>
</html>
如何修改它以便在找到1000以下的第一个素数后停止代码?
答案 0 :(得分:2)
问题是$finish="a"
- 您要将字符串a
( truthy )分配给$finish
。所以这个循环将永远运行(条件始终为真)。
您将标志设置为字符串和整数,而布尔值就足够了。除此之外,一旦找到除数>= 2
,您就可以停止for()
循环。如果你引入一个辅助函数,它就会变得更具可读性。
function isPrime($number) {
$max = $number;
for ($i=2; $i < $max; $i++) {
if ($number % $i == 0)
return false;
}
return true;
}
do {
$i = mt_rand(100, 9999);
} while ( ! isPrime($i) );
var_dump($i);
See it work here.我不太确定,sqrt($number)
应该足够$max
并缩短循环次数 - &gt;脚本更快。
答案 1 :(得分:0)
要在条件匹配时中断2个循环,您可以使用break 2
:
if($counter == 2){
print $i." is Prime <br/>";
$finish = "b";
break 2;
}