关于项目欧拉的问题3的难度(以c ++为单位)

时间:2016-09-03 12:55:15

标签: c++

所以,我现在已经尝试解决这个问题几个小时了。 不久我到达了一个逻辑上的解决方案 - 应该工作并且正在工作,但仅适用于不超过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;
}
提前谢谢! :)

1 个答案:

答案 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;  
}