scosant
12/17/2012 - 11:34 AM

projecteuler003 - largest prime factor

projecteuler003 - largest prime factor

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

#include <iostream>
#include <math.h>

int64_t CalculateLargestPrimeFactorNaive(int64_t num);
bool IsPrimeNaive(int64_t num);

int main(int argc, char *argv[])
{
    int64_t num = 600851475143;
    std::cout << "Largest prime factor of " << num
              << " is " << CalculateLargestPrimeFactorNaive(num)
              << std::endl;
    return 0;
}

int64_t CalculateLargestPrimeFactorNaive(int64_t num) {
    int64_t largest_prime = 1;
    for (int i = 2; i < sqrt(num); i++) {
        if (num % i == 0) {
            if (IsPrimeNaive(i)) {
                largest_prime = i;
            }
        }
    }
    return largest_prime;
}

bool IsPrimeNaive(int64_t num) {
    // sqrt(num) is the largest possible prime factor
    // of a number.
    for (int64_t i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}