Java Biginteger NextProbablePrime方法如何工作



我正在使用Java BigInteger类,对nextProbablePrime方法背后的算法感到好奇。我知道一些有效的原始测试算法,例如Miller-Rabin,但不确定此处实现了哪种算法。

尝试以下代码愉快,但仍然没有响应。

BigInteger number = BigInteger.ZERO;
number = number.setBit(82589933);
number = number.nextProbablePrime();

我已经使用了BigInteger的源代码。它是在内部使用 millerrabin 算法的nextProbablePrime方法。

为什么您的示例在不返回的情况下运行并运行:

您的数字为8200万位 ,并且(按质量数字th'm(这样的素数分为8200万/log_e(2(数字。因此,您要要求Miller-Rabin测试约1500万候选人,每个候选人涉及8200万位,每张检查都是无处不在的。是的,即使是像米勒·拉宾这样有效的算法,也将在这种超越含量的输入上花费一段时间。

(我记得我曾经跑过一个数字到另一个数字,要花太长的时间,然后向语言开发人员抱怨,他们应该使用重复的平方来更快地进行凸起...也有数百万个数字。(

最新更新