PHP使用嵌套循环输出20以内素数仅打印2、3,求代码错误排查
存在的逻辑错误
$status变量初始化位置错误:你把$status = true写在了外层for循环的外面,当第一个非素数(比如4)被判断后,$status会被赋值为false,之后所有外层循环的$status都会保持false状态,不会重置为true,导致后续素数无法正常判断输出。- 素数概念理解偏差:1不是素数,你主动输出1的代码不符合素数定义。
修正方案
- 将
$status = true的初始化逻辑移到外层for循环内部,每次判断新的数字之前都重置判断状态 - 删除主动输出1的代码
- 可选优化:内层循环只需要遍历到
sqrt($i)即可,不需要遍历到$i-1,还可以在找到因数后提前退出内层循环,大幅提升运行效率
修正后的可运行代码如下:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <?php echo "<h3>The prime numbers up to 20 are:</h3>"; //外层循环遍历2到20的所有数字 for( $i = 2; $i <= 20; $i++ ){ //每次判断新数字前重置状态为true $status = true; //内层循环判断是否为素数,优化为遍历到平方根即可 for( $k = 2; $k <= sqrt($i); $k++ ){ if( $i % $k == 0 ){ $status = false; //已经找到因数,提前退出循环节省性能 break; } } //如果是素数则输出 if($status == true) echo "<p>$i</p>"; } ?> </body> </html>
内容的提问来源于stack exchange,提问作者Sarai
相关产品推荐
相关产品推荐

