2

我正在对大数进行素数分解(主要是project 3 @ project Euler。我需要对声明为 long long 的数字使用模数。每次我尝试对那个巨大的数字求模时,我都会得到一个浮点异常。任何帮助都是非常感谢。谢谢。

我已经通过 gdb 运行了这个,看看发生了什么。下面是我的代码。在这一点上这是非常粗略的逻辑。 请不要给我问题的答案。我很乐意接受帮助以使这更好,只是请不要给我直接的答案。谢谢 :)

long factor(long number) {
  string br = "\n\r";
  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
4

2 回答 2

8

不要尝试修改 0,它是未定义的!这样做会导致除以零错误。

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

为了扩展我的答案,根据维基百科关于模运算的文章

大多数系统中,模 0 是未定义的,尽管有些系统确实将其定义为 a。

于 2011-06-12T15:46:12.007 回答
1

从...开始

long x = 1 ;

以避免被零除。

于 2011-06-12T16:45:56.763 回答