Skip to content

Instantly share code, notes, and snippets.

@wangkuiyi
Created September 6, 2012 10:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wangkuiyi/3654241 to your computer and use it in GitHub Desktop.
Save wangkuiyi/3654241 to your computer and use it in GitHub Desktop.
Find the largest prime factor of a number. http://projecteuler.net/problem=3
#include <math.h>
#include <stdio.h>
#include <vector>
typedef std::vector<long> Queue;
long find_smallest_divisor(long number) {
for (long i = 2; i < sqrt(number); ++i) {
if (number % i == 0) {
return i;
}
}
return number;
}
void factorize(long number, Queue* queue) {
for (long divisor = find_smallest_divisor(number);
divisor != number;
divisor = find_smallest_divisor(number)) {
queue->push_back(divisor);
number = number / divisor;
}
queue->push_back(number);
}
int main() {
const long NUMBER = 600851475143;
Queue q;
factorize(NUMBER, &q);
while (!q.empty()) {
long factor = q.back();
q.pop_back();
if (find_smallest_divisor(factor) == factor) {
printf("The largest prime factor of %ld is %ld", NUMBER, factor);
return 0;
}
}
return -1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment