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

C语言for循环统计质因数幂次问题:质因数分解输出异常排查

质因数分解程序的幂次输出问题修复

原代码核心问题

  • 变量num未初始化,第一次进入while(num != 0)循环时行为不可预测
  • 用check和check2跟踪质数的逻辑存在未定义行为(如未赋值就参与比较),且逻辑混乱导致幂次统计错误
  • 每次找到因数后重置i=1,既降低效率又打乱循环逻辑
  • 输出时机错误,每次整除时就输出,未等统计完当前质数的所有幂次就输出,导致指数显示异常

修正后的代码

#include <stdio.h>

int main() {
    int num;
    // 循环接收输入,输入0时退出
    while (1) {
        printf("\nInput number: ");
        scanf("%d", &num);
        if (num == 0) {
            break;
        }
        int val = num;
        int is_first = 1; // 标记是否为第一个输出的因数,控制分隔符

        // 从最小质数开始尝试分解
        for (int i = 2; i <= num; i++) {
            if (num % i == 0) {
                int power = 0;
                // 统计当前质数的幂次
                while (num % i == 0) {
                    power++;
                    num /= i;
                }
                // 处理分隔符:第一个因数前不加"."
                if (!is_first) {
                    printf(".");
                }
                is_first = 0;
                // 根据幂次输出对应格式
                if (power == 1) {
                    printf("%d", i);
                } else {
                    printf("%d^%d", i, power);
                }
            }
        }
        // 若循环结束后num未被分解,说明是质数
        if (val == num) {
            printf("%d is prime", val);
        }
        printf("\n-------------------");
    }
    printf("-------------------\nEnd");
    return 0;
}

修正关键点说明

  1. 输入逻辑优化:用while(1)配合break处理输入0退出,避免原代码中变量未初始化的问题
  2. 幂次统计简化:对每个质数用嵌套while循环统计整除次数,直接得到幂次,逻辑清晰无歧义
  3. 输出格式控制:用is_first标记控制分隔符,避免开头出现多余的.,且统一在统计完幂次后输出,保证格式符合要求
  4. 质数判断优化:循环结束后若原始值等于剩余值,说明无除自身外的因数,判定为质数

内容的提问来源于stack exchange,提问作者Username

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:01:39