BigInteger.pow和BigInteger.isProbablePrime的复杂性有哪些?

时间:2011-10-03 06:41:08

标签: java complexity-theory biginteger

pow类中Java 7的方法isProbablePrimeBigInteger有哪些复杂性?

我知道Rabin测试的简单实现是O(k(log(n))^ 3)复杂度,并且可以通过将Schönhage-Strassen algorithm用于长整数的快速乘法来减少。

3 个答案:

答案 0 :(得分:4)

假设标准算法,复杂性是:

pow()             : O( M(n * exponent) )
IsProbablePrime() : O( M(n) * n )

其中:

  • n是操作数中的位数。
  • exponent是幂函数的指数。
  • M(n)n x n数字乘法的运行时间。从Java 6开始,我认为是O(n^2)

pow()的说明:

对于长度为n位的输入操作数,增加到exp的幂,输出大约为n * exp位数。这是通过二进制供电算法完成的,其中操作数在每次迭代时被平方。因此复杂性变为:

O( M(n) + M(2*n) + M(4*n) + ... M(n * exp/2) ) = O( M(n * exp) )

这是一个几何和,因此总和变为O( M(n * exp) )

IsProbablePrime()的说明:

对于固定数量的Rabin-Miller迭代,每次迭代都有O(n)个大小为n x n个数字的乘法。因此,复杂性变为O( n * M(n) )

答案 1 :(得分:3)

简短的回答是它未被指定,因此受实施者的选择。

答案 2 :(得分:0)

如果您想查看来源,请点击此处:http://futureboy.us/temp/BigInteger.java

此处您问题的相关材料:What complexity are operations on Java 7's BigInteger?