2-4:
1. 如果m非常小, 即m/10 <= _int64, n*m即是高精乘单精度问题, 将n的数字一位一位的m相乘, 并记录下m*i(1<=i<=9)的结果, 然后左移相加即可.
2.如果m也是高精度, 将n分成n/m个部分, 每个部分用分治乘法, 复杂度为O(m^(log3)), 则总的复杂度为n/m*m^(log3), 即O(n*mlog(3/2)).
2-5:
对于大整数乘以10n只要在数组后添n个0即可。
设u = a*10^(2n/3)+b*10^(n/3)+c, v = e*10^(2n/3)+f*10^(n/3)+g.
则w = u*v = ae*10^(4n/3)+(af+be)*10^n+(ag+bf+ce)*10^(2n/3)+(bg+cf)*10^(n/3)+cg.
由ag+bf+ce = (a+b+c)*(e+f+g) - ae - af - be - bg - cf - cg.
则w = ae*10^(4n/3)+[(a+b+c)*(e+f+g)-ae-cg]*10^(2n/3)+(af+be)*10^n - (af+be)*10^
(2n/3) - (bg+cf)*10^(2n/3) + (bg+cf)*10^(n/3)+cg
又(af+be)*10^n - (af+be)*10^(2n/3) - (bg+cf)*10^(2n/3) - (bg+cf)*10^(n/3)
= 10^(2n/3)*((a*10^(n/3)-c)f+(e*10^(n/3)-g)b) - 10^(n/3)*((a*10^(n/3)-c)f+(e*10^
(n/3)-g)b)
因此w = ae*10^(4n/3)+[(a+b+c)*(e+f+g)-ae-cg]*10^(2n/3)+10^(2n/3)*((a*10^(n/3)-c)f+(e*10^(n/3)-g)b) - 10^(n/3)*((a*10^(n/3)-c)f+(e*10^(n/3)-g)b)+cg
只要计算ae, cg, (a+b+c)*(e+f+g), (a*10^(n/3)-c)f, (e*10^(n/3)-g)b五项
2-6:
对于任意的整数n可分解成 m*2c(m为奇数),则对于n*n矩阵,可划分成m*m个2c*2c的矩阵相乘,对于2c*2c的矩阵用快速矩阵乘法复杂度为O(7c), 共要做m3次,则总的复杂度为O(m37c)。
本文探讨了高精度运算中乘法的高效实现方法,包括当其中一个数较小或为高精度数时的不同策略,以及如何通过分治算法降低计算复杂度。

被折叠的 条评论
为什么被折叠?



