C++ 代码中的质因数并不适用于所有输入

Prime factor in c++ code does not work for all inputs

本文关键字:适用于 输入 不适用 代码 质因数 C++      更新时间:2023-10-16
我想

,这段代码会给我合成数输入的最大素因数。但是,它适用于某些输入,而不适用于其他输入。

#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;
}

您可以使用自动。另外作为一般提示:不要使用"使用命名空间 std"。习惯于编写 std:: 将为您节省一些麻烦,在处理大型项目时。