![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
一念之卓
这个作者很懒,什么都没留下…
展开
-
java大数运算详解【其十】大数除法之Burnikel-Ziegler除法算法
2、Burnikel-Ziegler除法算法(分块循环带余数试商法算法,简称分块试商法)/** *使用Burnikel-Ziegler算法计算{@code this / val}. * @param val 除数 * @return {@code this / val} */ private BigInteger divideBurnikelZiegler(BigInteger val) { return divideAndRemainde...原创 2020-12-17 01:39:13 · 875 阅读 · 0 评论 -
java大数运算详解【其九】大数除法之试商法(Knuth除法)核心算法
核心算法: /** * 该MutableBigInteger除以除数div。 * 商将被放置到提供的quotient对象中并将余数对象返回(当needRemainder值true)。 */ private MutableBigInteger divideMagnitude(MutableBigInteger div, MutableBigInteger quot...原创 2020-12-17 01:38:35 · 1262 阅读 · 0 评论 -
java大数运算详解【其八】大数除法
四、大数除法/** * 返回值为{@code (this / val)}的大型整数。 * * @param 除数 * @return {@code this / val} * @throws ArithmeticException 如果{@code val}值零。 */ public BigInteger divide(BigInteger val) { if (val.mag.length < BURNIKEL...原创 2020-12-17 01:37:45 · 2205 阅读 · 0 评论 -
java大数运算详解【其七】大数乘法之Karatsuba乘法和ToomCook3乘法
4、Karatsuba乘法(二分展开式乘法)/** * 使用Karatsuba乘法算法将两个大整数相乘。 * 这是一种递归的分治算法,与多聚类算法中通常使用的“小学”算法相比,它在处理大数问题时效率更高。 * 如果进行乘法的数组长度为n,“小学”算法的渐近O(n ^ 2)的复杂性。 * 相比之下,Karatsuba算法的复杂性O(n ^(log2(3))),或O(n ^ 1.585)。 * 在对过程进行评估时,它通过执行3次乘法而不是4次来实现这种性能提...原创 2020-12-17 01:37:03 · 1179 阅读 · 2 评论 -
java大数运算详解【其六】大数乘法之单位乘法和经典乘法
2、单位乘法 private static BigInteger multiplyByInt(int[] x, int y, int sign) { if (Integer.bitCount(y) == 1) {//移位优化 return new BigInteger(shiftLeft(x,Integer.numberOfTrailingZeros(y)), sign); } int xlen = x.length;...原创 2020-12-16 21:44:09 · 319 阅读 · 0 评论 -
java大数运算详解【其五】大数乘法之平方算法之ToomCook3平方算法
1.3、ToomCook3平方算法(三分展开式算法) /** * 使用3路Toom-Cook平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen和squareKaratsuba算法。 */ private BigInteger squareToomCook3() { int len = mag.length; // k是...原创 2020-12-16 21:42:46 · 822 阅读 · 1 评论 -
java大数运算详解【其四】大数乘法之平方算法之Karatsuba平方算法
1.2、Karatsuba平方算法(二分展开式算法) /** * 使用Karatsuba平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen算法。 */ private BigInteger squareKaratsuba() { int half = (mag.length+1) / 2; BigInteger xl ...原创 2020-12-16 21:41:25 · 1022 阅读 · 0 评论 -
java大数运算详解【其三】大数乘法之平方算法之按位二次展开式算法
所有解释都是最基本的,没有过多赘述,如若不懂静心思考。 1.1、按位二次展开式算法 /** * 将整型数组x的内容平方,结果放入整型数组z中,x的内容不变。 */ private static final int[] squareToLen(int[] x, int len, int[] z) { int zlen = len << 1; if (z == null || z.length < zlen)...原创 2020-12-16 21:39:25 · 483 阅读 · 0 评论 -
java大数运算详解【其二】大数乘法
这只是大数乘法的一部分,其支部此处不涉及,在下节再讲。三、大数乘法/** * 返回值为{@code (this * val)}的大型整数。 * * @implNote 当{@code val == this}时,实现可以提供更好的算法性能。 * * @param 乘数。 * @return {@code this * val}. */ public BigInteger multiply(BigInteger val) {...原创 2020-12-16 21:34:55 · 594 阅读 · 0 评论 -
java大数运算详解【其一】大数加减法
一、大数加法/** * 返回值为{@code (this + val)}的大型整数。 * * @param 加数。 * @return {@code this + val}. */ public BigInteger add(BigInteger val) { if (val.signum == 0) return this; if (signum == 0) ret...原创 2020-12-16 21:29:02 · 1501 阅读 · 0 评论