【问题标题】:Prime factorization质因数分解
【发布时间】:2015-12-02 14:09:53
【问题描述】:

我这里有一个简单的分解算法。

void primeFactor(int number){
    if (number == 1)return;

    int x = 2;
    while (number%x != 0)x++;

    cout << x << endl;
    primeFactor(number / x);
}

它适用于小数字,但是当我输入像 809800987876 这样的大数字时,我会在大约 3 个因子后得到 -1。

这里是 809800987876 的示例输出。

> 2 2 486957767
> -1

我该如何解决这个问题?

【问题讨论】:

  • 请不要将您的问题更改为其他问题。如果您有新问题,请使用“”链接提出新问题

标签: c++ prime-factoring


【解决方案1】:

您正在溢出int。在典型系统上,int 的最大值为 2147483647。809800987876 大于此值,因此会溢出。您可以使用long long,它的最大值至少为 9223372036854775807。

【讨论】:

  • 要是我的银行账户也有同样的问题就好了
  • 谢谢,您对我的算法有什么要评论的吗?会不会更有效率?
  • 如果我改用 _int64 不是更好吗?
  • @JohnCena7070 好吧,我不会递归来解决这个问题。有一个很好的答案 [here(stackoverflow.com/a/11924315/4342498),它展示了如何迭代地进行操作,并提供了一些更好的方法的更多信息。至于你的第二个问题,这更像是一个风格点。 long long 保证至少为 64 位。
  • @JohnCena7070 您可以对试除法进行两种简单的改进(例如,除了 2 之外,您不必测试任何偶数,并且您只需上升到并包括sqrt 的输入),以及其他更快(但更复杂)的算法。
猜你喜欢
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多