所以,我现在已经尝试解决这个问题几个小时了。 不久我到达了一个逻辑上的解决方案 - 应该工作并且正在工作,但仅适用于不超过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;
}
提前谢谢! :)
答案 0 :(得分:-1)
代码问题 -
使用 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("%d\n", max);
return 0;
}