第三日 最大质因数

projectEuler第三问:
13195的质因数是5,7,13和29。
600851475143的最大质因数是多少?

Haskell:

primes (x:xs) = x:primes [m|m<-xs,m `mod` x /= 0]
findBiggestFactor n primes
    | factor==n = n
    | otherwise = findBiggestFactor (n `div` factor) restPrimes
        where restPrimes@(factor:rest) = dropWhile (\p->n `mod` p /=0) primes
answer = findBiggestFactor 600851475143 (primes [2..])

_ 顺便鄙视一下c++:

#include 
#include 
#include 
#include 
#include "util.h"
using namespace std;
const unsigned long long NB= 317584931803ULL;
long ProchainDiviseur(const unsigned long long& p_nb, const vector p_nbPremiers){
    long nb= 0;
    for (int i= 0; i != p_nbPremiers.size() && nb == 0; ++i){
        if (p_nb % p_nbPremiers[i] == 0)
            nb= p_nbPremiers[i];
        }
    return nb;
}
long LargestPrimeFactor(const unsigned long long& p_nb){
    long largestPrimeFactor= 0;
    unsigned long long nbEnCours= NB;
    vector nbPremiers= ConstruireNbPremiers((int)sqrt((double)p_nb / 2));
    long facteurPremierEnCours= 0;
    do{
        facteurPremierEnCours= ProchainDiviseur(nbEnCours, nbPremiers);
        if (facteurPremierEnCours != 0){
            nbEnCours/= facteurPremierEnCours;
        }
        if (facteurPremierEnCours > largestPrimeFactor)
            largestPrimeFactor= facteurPremierEnCours;
    }while (facteurPremierEnCours != 0);
    return largestPrimeFactor;
}
int main(){
    cout << LargestPrimeFactor(NB) << '\n';
    return 0;
}

你可能感兴趣的:(第三日 最大质因数)