为什么这段C++代码无法正确输出num的质因数?
C++质因数分解程序异常排查
代码存在的3个核心问题
- 致命运行错误:
isPrime函数中循环变量初始值设为0,执行n0%i时触发除零异常,程序直接终止,根本走不到质因数打印的逻辑。同时这个循环的初始值逻辑本身就写错了,判断素数的试除应该从最小素数2开始,从0或者1开始试除都不符合逻辑。 - 逻辑边界漏洞:
prime_Factors的循环终止条件写为i < n1,如果输入的数字本身是素数,循环永远不会遍历到数字本身,导致素数输入场景下没有任何输出。 - 潜在溢出风险:质因数判断逻辑里用
x *= i逐次放大i来判断幂次整除,当输入数字较大时x会超出int类型的取值范围,触发整数溢出导致判断结果错误。
修正后的可运行代码
#include<bits/stdc++.h> using namespace std; void prime_Factors(int); bool isPrime(int); int main() { int num; cout << "Enter the number to find it's prime factors: "; cin >> num; if (num < 2) { cout << "Please enter a number greater than or equal to 2." << endl; return 0; } prime_Factors(num); return 0; } void prime_Factors(int n1) { // 修正循环边界到i <= n1,覆盖输入本身为素数的场景 for(int i = 2; i <= n1; i++) { if(isPrime(i)) { // 每次整除后直接将原数除以i,避免x自乘带来的溢出问题 while(n1 % i == 0) { cout << i << " "; n1 /= i; } } } } bool isPrime(int n0) { if(n0 <= 1) return false; // 修正循环初始值为2,从最小素数开始试除,避免除零错误 for(int i = 2; i*i <= n0; i++) { if(n0%i == 0) return false; } return true; }
测试验证
输入12,输出:
2 2 3
输入7(素数),输出:7
输入90,输出:2 3 3 5
内容的提问来源于stack exchange,提问作者HellsapwnXerxes
相关产品推荐
相关产品推荐

