#include <iostream>
using namespace std;
void whosprime(long long x)
{
bool imPrime = true;
for(int i = 1; i <= x; i++)
{
for(int z = 2; z <= x; z++)
{
if((i != z) && (i%z == 0))
{
imPrime = false;
break;
}
}
if(imPrime && x%i == 0)
cout << i << endl;
imPrime = true;
}
}
int main()
{
long long r = 600851475143LL;
whosprime(r);
}
I'm trying to find the prime factors of the number 600851475143 specified by Problem 3 on Project Euler (it asks for the highest prime factor, but I want to find all of them). However, when I try to run this program I don't get any results. Does it have to do with how long my program is taking for such a large number, or even with the number itself?
Also, what are some more efficient methods to solve this problem, and do you have any tips as to how can I steer towards these more elegant solutions as I'm working a problem out?
As always, thank you!
long long r
...void whosprime(int x)
" – Polymerx
must be prime. You can then search for factors ofx / factor
. – Zerlinefactor
is the least prime factor ofx
, thenx / factor
cannot have a smaller prime factor, so you continue searching atfactor
, not at 2. – Quirinusint
s are 64 bits or this might well not compile (or if it did and you ignored the warnings would loop infinitely.) – Atheling