习题2-4、2-5、2-6

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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值