PE3 Largest prime factor(最大素数因子)

前言PEProject Eluer)是学Mathematica(以后我简称Mma)接触到的,不用提交代码,只用提交答案的答题网站。PE的题目会给出C++Mma代码实现,以此学习Mma(已经被它的简洁给折服了..)。

 

题目

The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?

https://projecteuler.net/problem=3

分析

题目求由数的因式分解,求因式中最大值。

看到prime,就往素数方面去想了,思路是,把N用一个素数p去除,缩小N,p等于下一个素数,循环,直到N缩小到1为止

Code

 

#include<iostream>

 

using namespace std;

int nextPrime(int n);

bool isPrime(int n);

int MaxFct(__int64 n);

int main(){

    __int64    n = 600851475143;

    cout << MaxFct(n);

    return 0;

}

int MaxFct(__int64 n){

    int i = 0;

    int maxFct = 1;

    while (n>1)

    {

       i = nextPrime(i);

       if (n%i == 0){

           n /= i;

           maxFct = i > maxFct ? i : maxFct;

       }

 

    }

    return maxFct;

}

int nextPrime(int n)

{

    n++;

    while (!isPrime(n))

       n++;

    return n;

}

bool isPrime(int n){

    int a = sqrt(n);

    bool isP = true;

    if (n < 2){

       return false;

    }

    int t;

    for (int i = 2; i <= a; i++)

    {

       t = (n % i);

       if ((n % i) == 0){

           isP = false;

           break;

       }

    }

    return isP;

}

 

Mathematica  

FactorInteger[600851475143] // Flatten // Max

posted on 2015-05-13 14:48  DYF_WUH  阅读(395)  评论(0编辑  收藏  举报