分类: C/C++
2011-11-28 23:37:28
将n位二进制数X和Y都分为两段,每段长n/2位(为简单起见,假设n是2的幂)。则有:
其中X1、Xo分别为X的高位和低位,Y1、Yo分别为Y的高位和低位。C2是它们的前半部分的积;Co是它们后半部分的积;C1是X、Y两部分的和的积 减去C2与C0的积。如果n/2也是偶数,我们可以利用相同的方法来计算C2、Co的和C1。因此我们就得到了一个计算n位数积的递归算法:
该算法会有多少次位乘呢?因为n位数的乘法需要对n/2位数做三次乘法运算,乘法次数M(n)的递推式将会是:
当n>1时,M(n)=3M(n/2),M(1)=1
当n=2^k时,我们可以用反向替换法对它求解:
因为