Getting the error floating point exception: 8

I don't see a floating point anywhere, but if I had to guess it's because it's due to overflow. Use unsigned long long or long long instead of regular long.

sizeof(long) on some compilers has evaluated to 4, similar to sizeof(int), which means that the limit of long is 2147483647. long long is required by the C++ standard to be at least 64-bits, double that of long and int, which has a signed maximum of 9223372036854775807.

The error stems from your code: You're doing modulus by zero, which is wrong.

Consider doing this instead:

#include <iostream>

using namespace std;

bool isPrime(unsigned long long number);

int main(){
    const unsigned long long number = 600851475143;
    unsigned long long max = 0;
    for(unsigned long 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;
}

Notice how i = 0 was changed to i = 1


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;
}

Tags:

C++