Подтвердить что ты не робот

Целочисленная константа слишком велика для "длинного" типа

Возможный дубликат:
длинный длинный на C/С++

Написание простой программы для задачи Эйлера проекта. Отказывается от компиляции, потому что "целочисленная константа слишком велика для" длинного "типа", хотя она должна быть в пределах размера без знака long long. Использование компилятора dev-С++.

код:

#include <iostream>

bool isprime (unsigned long long i)
{
    if(i==1||i==0) return false;
    if(i==2) return true;
    for(unsigned long long k=2;k!=i-1;k++)
    {      
        if(i%k==0) return false;
    }
    return true;
}

int main()
{
    for(unsigned long long i=600851475143;i>=0;i--) //problematic line
    {
        if(isprime(i))
        {
            std::cout<<i;
            std::cin.get();
            return 0;
        }
    }
}
4b9b3361

Ответ 1

Попробуйте суффикс "ULL": 600851475143ULL

Ответ 2

В вашем литеральном типе есть тип int, который недостаточно велик для хранения значения. Попробуйте 600851475143ULL в качестве первого исправления.

Обратите внимание, что даже этот цикл for никогда не будет завершен, так как unsigned никогда не может быть меньше 0. Вместо этого используйте long long и 600851475143LL.

Ответ 3

Должно быть ограничение поддержки dev-С++ для типа данных long long. Он отлично компилируется на MS VС++ 2010.