модуль операций по длинным в 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 2

2 ответа:

Не пытайтесь изменить на 0, это неопределенно! Это приведет к ошибке деления на ноль.

long x = 0;
modulus = number % x; // x is 0 here and thus not valid

Чтобы немного расширить мой ответ, за статью Википедии О операциях по модулю

A по модулю 0 не определено в большинстве систем, хотя некоторые определяют его как a.

Начните с

long x = 1 ;

Чтобы избежать деления на ноль.