所以,我一直在试图解决这个问题几个小时了。很快,我找到了一个逻辑上应该可行且正在可行的解决方案,但只适用于不大于10^7的数字。我想我可以只保留他们要求的具体数字(600851475143),但我真的很想知道-为什么我的代码不能处理大数?
这是我的解决方案的代码:
#include <iostream>
#include <stdlib.h>
#include <cmath>
using namespace std;
//enter any number and its largest prime factor will be detected.
int main()
{
long largest(1),num(0);
bool primecheck;
cout<<"enter the desired number :"<<endl;
cin>>num;
if (num%2==0)
largest=2;
cout<<"the relevant factors are: ";
for (int i=3;i<=int((sqrt(num))/2);i+=2)
{
primecheck=true;
for(int j=2;j<i;j++)
{
if(i%j==0)
primecheck=false;
}
if(primecheck)
if(num%i==0)
{
largest=i;
cout<< largest<<"t";
}
}
cout<<endl<< "the largest prime factor of the number you have entered is: " <<largest;
return 0;
}
提前感谢!:)
代码有问题-
使用long long int作为数据类型,而不是long int,因为c++识别long int与int具有相同的范围。
如果你想参考我在C/c++中的简洁解决方案-
*对于c++,只需将头文件更改为iostream。
#include <cstdio>
#define MAX 775147
#define NUM 600851475143
int main()
{
long long n = NUM;
int max = 3;
for(int i = 3; i <= MAX; i+=2)
{
if(n%i == 0)
max = i;
while(n%i == 0)
{
n /= i;
}
}
printf("%dn", max);
return 0;
}