我正在尝试编写一个程序来计算用户输入的数字的最大素数,函数“ FindFactor” 计算存储在变量中的最大素数“因子” 和函数“ TestFactor” 进行测试以查看该因子有多少个因子,如果,则将其存储在“ NFactors” 中“ NFactors” 等于 0 ,Factor是一个主要因素,否则,初始输入值将替换为“ Factor”,然后循环再次开始。
问题在于任何给定数字的输出都是输入的最大因素,而不是素数因素。
经过一番摸索后,我已经确认问题出在“ TestFactor” 中,因为“ FindFactor” 能够正确计算最大因子,但是我不知道为什么“ TestFactor” 总是输出 0 ,因为这两个函数实际上是相同的。
当我尝试使用调试器时,事情变得更加奇怪(但这可能是由于这是我第一次使用它,我不知道自己在做什么):
我将断点设置为“ TestFactor” 中包含的局部变量“ NF” ,以查看其值,并收到一条消息,告诉我”标识符“ i”未定义” ,“ i” 是“ FindFactor” 中包含的局部变量,该函数实际上可以正常工作。
然后我将断点设置为“ NFactors” ,这一次出现以下异常:“最大的Prime Factor.exe中0x00A01D9D的未处理异常:0xC0000094:整数除以零。 “
请参考以下操作:
if(y%j == 0)
绝对不是这种情况,例如 j = y-1。
这是完整的程序:
#include <iostream>
using namespace std;
int FindFactor(int x);
int TestFactor(int y);
int main() {
int input, Factor, NFactors,inputsave; bool prime=false;
cout << "Please enter a number" << endl;
cin >> input;
inputsave = input;
while (prime == false) {
Factor = FindFactor(input);
NFactors = TestFactor(Factor);
if (NFactors != 0) {
prime = true;
}
else {
prime = false;
input = Factor;
}
}
cout << "The largest prime factor for " << inputsave << " is " << Factor << endl;
}
int FindFactor(int x) {
int i;
for (i = x - 1; i > 1; i--) {
if (x % i == 0) {
break;
}
else {};
}
return i;
}
int TestFactor(int y) {
int j, NF = 0;
for (j = y - 1; j > 1; j--) {
if (y % j == 0) {
NF++;
}
else {};
}
return NF;
}
总结:
“ TestFactor” :输出始终为 0 。
主程序:输出始终是输入的最大因素,而不是素数因素。
答案 0 :(得分:1)
TestFactor中有一个错字,请使用j> 1作为循环条件。