C++ 代码中的质因数不适用于所有输入
Prime factor in c++ code does not work for all inputs
我想这段代码会给我输入合数的最大质因数。但是,它对某些输入有效,对其他输入无效。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num=1, sum, count=0, test;
cin>>test;
while(num<=(sqrt(test)))
{
if(test%num==0)
{
for (int prime=2; num>prime; prime++)
{
if(num%prime==0)
count ++;
}
if (count == 0)
sum=num;
}
num++;
}
cout<<sum;
}
它不起作用的示例:
输入:6,预期:3,得到:2;
输入:540,预期:5,得到:3;
输入:600,预期:5,得到:3;
有人可以告诉我要更改什么吗?
如果要最大质因数,需要一直查到test/2
。例如。对于 38,您目前最多只能检查 6 个,错过 19 个。
此外,每次测试后您需要休息计数。
您必须添加
count = 0
在
之后
if (count == 0)
sum = num;
另外,当输入数是质数时,最大质数除数就是输入数本身。在这种情况下,变量 sum
从未初始化。在程序开始时将其初始化为 0
并在 while
循环后添加
if (sum == 0)
sum = test;
有点晚了但还是:
int main() {
auto num = 1;
auto sum = 0;
auto count = 0;
auto test = 0;
std::cin >> test;
while (num <= test / 2) {
count = 0;
if (test % num == 0) {
for (auto prime = 2; num > prime; prime++) {
if (num % prime == 0) count++;
}
if (count == 0) sum = num;
}
num++;
}
std::cout << sum;
}
您可以使用自动。另外作为一般提示:不要使用 "using namespace std"。习惯编写 std:: 会为你在更大的项目中省去一些麻烦。
我想这段代码会给我输入合数的最大质因数。但是,它对某些输入有效,对其他输入无效。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num=1, sum, count=0, test;
cin>>test;
while(num<=(sqrt(test)))
{
if(test%num==0)
{
for (int prime=2; num>prime; prime++)
{
if(num%prime==0)
count ++;
}
if (count == 0)
sum=num;
}
num++;
}
cout<<sum;
}
它不起作用的示例:
输入:6,预期:3,得到:2;
输入:540,预期:5,得到:3;
输入:600,预期:5,得到:3;
有人可以告诉我要更改什么吗?
如果要最大质因数,需要一直查到test/2
。例如。对于 38,您目前最多只能检查 6 个,错过 19 个。
此外,每次测试后您需要休息计数。
您必须添加
count = 0
在
之后if (count == 0)
sum = num;
另外,当输入数是质数时,最大质数除数就是输入数本身。在这种情况下,变量 sum
从未初始化。在程序开始时将其初始化为 0
并在 while
循环后添加
if (sum == 0)
sum = test;
有点晚了但还是:
int main() {
auto num = 1;
auto sum = 0;
auto count = 0;
auto test = 0;
std::cin >> test;
while (num <= test / 2) {
count = 0;
if (test % num == 0) {
for (auto prime = 2; num > prime; prime++) {
if (num % prime == 0) count++;
}
if (count == 0) sum = num;
}
num++;
}
std::cout << sum;
}
您可以使用自动。另外作为一般提示:不要使用 "using namespace std"。习惯编写 std:: 会为你在更大的项目中省去一些麻烦。