【问题标题】:Why does Java BigInteger say 'probably prime' and not 'certainly prime'?为什么 Java BigInteger 说“可能是素数”而不是“肯定是素数”?
【发布时间】:2019-04-14 01:12:51
【问题描述】:

BigInteger 的 JavaDoc 让我感觉很不安全,例如下面的构造函数说:

BigInteger(int bitLength, int certainty, Random rnd)

构造一个随机生成的正 BigInteger,它可能是 素数,具有指定的位长度。

为什么只是可能?为什么不肯定?我还能相信结果是质数吗?

【问题讨论】:

  • 你读过the detailed section吗?增加的运行时间是为什么只有可能。另见stackoverflow.com/q/8744085/3001761
  • 这可能只是因为它使用了可能会失败的主要测试算法。文档的其余部分提供了失败概率的上限。
  • Maurer 有一种算法可以找到保证为素数的素数。参见例如this 问题。该算法目前在 Java 运行时中不可用。

标签: java biginteger


【解决方案1】:

docsBigInteger(int bitLength, int certainty, Random rnd)

certainty:衡量调用者的不确定性 愿意容忍。新 BigInteger 的概率 表示一个质数将超过 (1 - ½确定性)。的执行时间 这个构造函数与这个参数的值成正比。

所以构造函数让你指定它是素数的确定性,这就是为什么文档说“可能”

【讨论】:

    【解决方案2】:

    因为概率算法的运行速度比验证数字绝对是素数要快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2017-11-11
      • 2011-03-30
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多