I’m trying to work through Project Euler and I’m hitting a barrier on problem 03. I have an algorithm that works for smaller numbers, but problem 3 uses a very, very large number.
Problem 03: The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143?
Here is my solution in C# and it’s been running for I think close to an hour. I’m not looking for an answer because I do actually want to solve this myself. Mainly just looking for some help.
static void Main(string[] args) { const long n = 600851475143; //const long n = 13195; long count, half, largestPrime = 0; bool IsAPrime; half = n / 2; for (long i = half; i > 1 && largestPrime == 0; i--) { if (n % i == 0) { // these are factors of n count = 1; IsAPrime = true; while (++count < i && IsAPrime) { if (i % count == 0) { // does a factor of n have a factor? (not prime) IsAPrime = false; } } if (IsAPrime) { largestPrime = i; } } } Console.WriteLine('The largest prime factor is ' + largestPrime.ToString() + '.'); Console.ReadLine(); }
For starters, instead of beginning your search at n / 2, start it at the square root of n. You’ll get half of the factors, the other half being their complement.
eg: