Java的BigInteger类采用什么算法进行乘法和除法,以及它们各自的时间复杂度是什么?
Java的BigInteger类使用什么原始类型 - byte,short,int等 - 以及为什么?
Java的BigInteger类如何处理其原始类型已签名的事实?如果答案是它只是做它并且它真的很混乱,那就是我需要/想要知道的全部内容。我真正得到的是它是否像一些python库作弊一样欺骗,因为它们不是用python编写的?
答案 0 :(得分:3)
我查看了BigInteger
here的源代码。这是我找到的。
BigInteger
没有"作弊"。在Java"作弊"通过使用所谓的" native"来完成。功能。有关这些内容的详尽列表,请参阅java.lang.Math
。
BigInteger
使用int
来表示其数据。
private transient int[] words;
是的,它非常混乱。很多人都在嚼着这样的人。
答案 1 :(得分:1)
Oracle的java.math.BigInteger类经历了从Java 7到Java 8的一些广泛改进。通过检查grepcode.com上的源代码,亲自看看。它不会作弊,它都是纯粹的java。
在内部,它使用整数的sign-magnitude representation,使用int
值数组来存储幅度。回想一下,java int是一个32位的值。使用所有32位而不考虑符号。这个大小也很方便,因为两个int
的乘积适合java long
。
从Java 8开始,BigInteger类添加了一些高级算法,如Karatsuba和Toom-Cook乘法,以提高数千位整数的性能。
答案 2 :(得分:0)
原因:这是大多数平台上最快的。