大整数的乘法

来源:互联网 发布:王克晶java百度百科 编辑:程序博客网 时间:2024/05/02 15:28

问题描述

设X和Y都是n位二进制整数,现在要计算他们的乘积XY,可以用小学所学的方法来设计一个计算乘积XY的算法,但是这样做计算步骤太多,效率较低。如果将每两个一位数的乘法或加法看作一步运算,但是这样做计算步骤太多,效率较低。这种方法要进行O(n2),采用分治法来设计更有效的大整数乘积算法

解决思想

将n位二进制整数X和Y都分成2段,每段的长为n/2位,由此X = A2n/2+B,Y = C2n/2+D.这样X和Y的乘积为
XY = (A2n/2+B)(C2n/2+D) = AC2n+(AD+BC)2n/2+BD

如果按此式计算XY,则必须进行4次年/2位整数的乘法(AD,AC,BC 和 BD),以及3次不超过2n位的整数加法,此外还要做2次移位。所以这些加法和移位共用O(n)步运算。

二进制大整数乘法同样可应用于十进制打整数的乘法以减少乘法次数,提高算法效率。

原创粉丝点击