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:: 会为你在更大的项目中省去一些麻烦。