You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计指定数量质数时C语言程序陷入无限循环问题求助

质数统计程序无限循环的问题修复

你的程序陷入无限循环的核心原因是flag变量未在每次检查新数字时重置:

  • 第一次遇到非质数(比如4)时,flag被设为1,之后这个值再也没被改回0
  • 后续所有数字都会被判定为非质数,ctr无法增长到输入的n,外层循环的ctr != n条件永远成立,导致无限循环

修复后的代码

#include <stdio.h>

int main (){
    int n; 

    printf("Enter size N: ");
    scanf("%d", &n);

    int i, j, ctr = 0, flag; 
    for (i = 2; ctr != n; i++){
        flag = 0; // 每次检查新数字前重置flag,确保判断独立
        // 优化:内层循环只需检查到sqrt(i),减少不必要的计算
        for (j = 2; j * j <= i; j++){ 
            if (i % j == 0){
                flag = 1;
                break;
            }
        }
        if (flag != 1){
            ctr++;
            printf("%d ", i); // 可选:打印找到的质数,方便验证结果
        }
    }
    
    return 0;
}

关键修复点

  1. 重置flag变量:将flag = 0移到外层循环内部,每次开始检查新数字i时重置标记,保证每个数字的质数判断不受之前结果影响
  2. 优化内层循环范围:把j < i改为j * j <= i,因为若i存在大于其平方根的因数,对应的另一个因数必然小于平方根,这样能大幅减少循环次数,提升程序效率

内容的提问来源于stack exchange,提问作者Daniel Gilbert Dela Peña

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:00:46