找到最大的素因子

时间:2013-12-30 08:49:54

标签: c++ primes

我正在从Project Euler处理以下问题。

What is the largest prime factor of the number 600851475143?

我提出了以下解决方案。

#include<iostream>
#include<cstdlib>
#include <limits>
#include <math.h>
 /**Project Euler:What is the largest prime factor of the number 600851475143**/
using namespace std;
bool isPrime(int n){
    int sq,a=2;
    sq=sqrt(n);
    while(a<sq)
    {
        if(n%a==0)
            return false;
    }
    return true;
}
int main() {
int c=2,max_prime;
long long d=600851475143;
int e=sqrt(d);
while(c<e)
{
    if(isPrime(c))
    {
            if(d%c==0)
                max_prime=c;
    }
c++;
}
cout<<max_prime;
    return 0;
}

程序中没有编译错误,但运行时需要花费大量时间。我已经查看了其他解决方案,但我无法找到解决方案中的错误。我怀疑由于涉及的数量众多而出现了问题。那可能是什么?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

你的isPrime函数永远不会增加a,所以你在那里无限循环。

答案 1 :(得分:0)

isPrime方法中,您不会更改控制while语句正文中while条件的任何变量,因此循环将永远运行。