Java 中 BigInteger.probablePrime() 与其他素数算法的区别

Posted

技术标签:

【中文标题】Java 中 BigInteger.probablePrime() 与其他素数算法的区别【英文标题】:Difference between BigInteger.probablePrime() and other primality algorithms in java 【发布时间】:2012-02-03 08:54:01 【问题描述】:

我正在使用 Java 实现一个 RSA 加密程序。现在我正在使用BigInteger.probablePrime(1024, rnd) 来获取素数。这里 rnd 是由 Random rnd = new Random() 生成的随机数。 我需要测试各种加密速度。

我的问题是:

    BigInteger.probablePrime(1024, rnd) 使用什么算法?

    上述算法与其他算法有什么区别:如 Rabin-Miller、Fermats、Lucas-Lehmer?

谢谢。

【问题讨论】:

您能指定语言吗?我假设 Java,但假设......在发布之前阅读您的帖子并删除错误不会有任何伤害。 抱歉,是的 java。我认为错误的意思是我陈述bigint的方式。我试图简写它我确实明白这不是如何在 java 中使用该方法 我知道不是每个人都能写出相同水平的英语,但即使方法拼写错误,也很难从中查找任何内容。另外,请使用代码标签作为方法。如果您无法拼写“BigInteger.probablePrime()”,您可以恢复为从在线 JavaDoc 复制/粘贴它。现在它看起来您没有花任何时间在问题上,我们将回报不花任何时间在答案上的青睐。 再次为没有回应和关怀的方式道歉。这是我的第一篇文章,我不熟悉写问题的语法和方式。已注明以供将来参考。 这需要一些时间来适应,到目前为止我所有的链接都写得很糟糕。 Meta *** 有很多关于标记的有用技巧。您可以在您的问题上点击edit 并检查来自 mikej 的更改。 【参考方案1】:

BigInteger 的可能素数方法使用 Miller-Rabin 和 Lucas-Lehmer 算法来测试素数。

见内部方法BigInteger.primeToCertainty

【讨论】:

这似乎是正确的答案。我们知道算法的名称在用于素数 > 95 位的位筛后面吗? BitSieve 回调到BigInteger.primeToCertainty 啊,这可能(请原谅双关语)是意料之中的,谢谢迈克尔,还没有发现。 非常感谢您的帮助!并感谢您提供源代码的链接。非常感谢您的所有帮助。祝您有美好的一天。【参考方案2】:

Java 源代码可供下载,您可以自己查看。 这是BigInteger.probablePrime(int, Random)的代码:

public static BigInteger probablePrime(int bitLength, Random rnd) 

    if (bitLength < 2)
        throw new ArithmeticException("bitLength < 2");

    // The cutoff of 95 was chosen empirically for best performance

    return (bitLength < SMALL_PRIME_THRESHOLD ?
            smallPrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd) :
            largePrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd));

实际测试包含在smallPrime()largePrime() 方法中,直接在源代码中。

【讨论】:

这两个方法都通过 primeToCertainty() 方法调用 passMillerRabin() 和 passLucasLehmer(),至少在 Michael 链接的 OpenJDK 1.7 源代码中。对于大素数(> 95 位),使用 BitSieve。 非常感谢您的帮助!并感谢您提供源代码的链接。非常感谢您的所有帮助。祝您有美好的一天。

以上是关于Java 中 BigInteger.probablePrime() 与其他素数算法的区别的主要内容,如果未能解决你的问题,请参考以下文章

java中native的用法

java中Color的用法!

java中重载有啥用

java中int 和 Integer 有啥区别

java 中getBounds啥作用

java中怎么取出数组中的数组