const long number = 600851475143;
There is overflow, long can’t hold that big number.
see this link
LONG_MAX is 2147483647
try:
const unsigned long long number = 600851475143; unsigned long longmax = 0;
Edit:
You can’t % against 0, i
starts from 0
for(long i= 0; i*i <= number; i++) ^^ { if(number % i == 0 && isPrime(i)) ^^^ { max = i; cout<< max << endl; }
}
Minor change to a working version:
bool isPrime(unsigned long long number); int main(){ const unsigned long long number = 600851475143; unsigned long long max = 0; for(long i = 1; i*i <= number; i++) { if(number % i == 0 && isPrime(i)) { max = i; cout<< max << endl; } } return 0; } bool isPrime(unsigned long long number) { if(number <= 1) return false; if(number == 2) return true; if(number % 2 == 0) return false; for(unsigned long long i= 3; i*i <= number; i+=2) { if(number % i == 0) { return false; } } return true; }