pow
类中Java 7的方法isProbablePrime
和BigInteger
有哪些复杂性?
我知道Rabin测试的简单实现是O(k(log(n))^ 3)复杂度,并且可以通过将Schönhage-Strassen algorithm用于长整数的快速乘法来减少。
答案 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?