困难与问题.3项目欧拉(c++)

  • 本文关键字:c++ 项目 问题 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;
}

提前感谢!:)

代码有问题-

使用long long int作为数据类型,而不是long int,因为c++识别long intint具有相同的范围。

如果你想参考我在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;  
}

最新更新