модуль операций по длинным в C++
Я работаю над простой факторизацией больших чисел (главным образом, project 3 @ project Euler. Мне нужно использовать модуль на числах, объявленных как long long. Каждый раз, когда я пытаюсь умножить это гигантское число, я получаю исключение с плавающей точкой. Любая помощь будет весьма признательна. Спасибо.
Я прогнал это через gdb и вижу, что происходит. Ниже приведен мой код. Это очень грубая логика на данный момент. , пожалуйста, не дают мне ответа на проблему. Я буду с радостью приму помощь в том, чтобы сделать это лучше, только, пожалуйста, не давайте мне прямого ответа. Спасибо :)
long factor(long number) {
string br = "nr";
long x = 0;
/*this modulus variable is an attempt
to move the answer into a long long container
to see if that solves my floating point exception,
it didn't*/
long long modulus;
while(x <= number) {
modulus = number % x;
if(modulus == 0) {
cout << number/x << br;
return factor(number/x);
}//if number % x
else {
return x;
}//else
x++;
}//while
}//factor
2 ответа:
Не пытайтесь изменить на 0, это неопределенно! Это приведет к ошибке деления на ноль.
long x = 0; modulus = number % x; // x is 0 here and thus not valid
Чтобы немного расширить мой ответ, за статью Википедии О операциях по модулю
A по модулю 0 не определено в большинстве систем, хотя некоторые определяют его как a.