【问题标题】:All factors of big numbers in C/C++C/C++中大数的所有因式
【发布时间】:2012-09-03 16:26:24
【问题描述】:

我正在尝试找出大约 10^18 的数字的所有因数...但是有时间限制会产生问题。 我所做的是使用 Eratosthenes 的 Sieve 来查找因子,然后存储因子,但速度很慢......

【问题讨论】:

  • 确实如此。这就是公钥加密算法起作用的原因:分解大数(大约 10^200)需要很长时间而不实用。
  • @PeteBecker 10^18 完全可以被试用部门暴力破解。 10^9 在一台像样的计算机上划分可能只需要几分钟。但我想 OP 从来没有指定什么是“太慢”。
  • @Mysticial - 很公平。我只是提出一个关于加快保理的一般性观点。

标签: c++ c algorithm factors


【解决方案1】:

如果空间不是问题,您可以存储最多 10^9 的素数列表(列表可用于 download)并使用它来分解最多 10^18 的任何数字。 您还可以使用因式分解算法(如 pollard 的 rho 或 others)。

【讨论】:

    【解决方案2】:

    我真的建议阅读有关此整数分解的 Wiki 文章:http://en.wikipedia.org/wiki/Integer_factorization

    通用分解方法很慢。但是,可以尝试使用一些特殊用途的方法。

    【讨论】:

      【解决方案3】:

      将素数列表 p

      从您的问题中不清楚您是要分解一堆 10^18 的数字,还是要分解 所有 个数字 N所有 数字 N

      如果您只想将一堆数字 N 分解为 10^18 的数量级,那么有很多方法可以做到这一点。 “最佳”方式取决于特定数字的属性。例如,平均而言,10^18 左右的随机整数比 10^9 阶的两个素数乘积的整数更容易因式分解,因为在转向更复杂的算法之前,可以通过试除法消除小因素。这更像是一个计算数论问题而不是编程问题。如果这是您的问题,我推荐给Factoring section of mersenneforum.org

      如果您想要一个快速而肮脏的解决方案,而且速度不会慢得离谱,那么就不要重新发明轮子。尝试例如 GMP-ECM 或看看 PARI/GP 是否可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        相关资源
        最近更新 更多