大整数乘法-算法设计与分析实验二
Posted TIME0101
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大整数乘法-算法设计与分析实验二相关的知识,希望对你有一定的参考价值。
1.问题分析
设x,y十进制整数,计算乘积xy。
用分治方法设计更有效的大整数乘法。
2. 问题建模
将n为十进制整数x,y分为两段,每段长为n/2(若位数为奇数,每段长为[n/2],[n/2]+1)。x分为A和B,y分为C和D.比如 8945456 ,即A=89,B=45,C=4,D=56.
引入公式:
3.算法描述
设x,y十进制整数,计算乘积xy。
用分治方法设计更有效的大整数乘法。将n为十进制整数x,y分为两段,每段长为n/2(若位数为奇数,每段长为[n/2],[n/2]+1)。x分为A和B,y分为C和D.比如 8945456 ,即A=89,B=45,C=4,D=56.
引入公式:
只需要做三次n/2为整数的乘法。T(n)=O(n^log3)
4.算法源码
def Num(z): #求10位以内的z是几位数
n=0;
while z>0:
n=n+1
z=int(z/10)
return n
def Bignum(x,y):
if(Num(x)<=2 or Num(y)<=2):
return x*y
else:
n=int(Num(x)/2)
m=int(Num(y)/2)
a=int(x/pow(10,n))
b=x-a*pow(10,n) #a是x前半部分,b是x后半部分
c=int(y/pow(10,m))
d=y-c*pow(10,m) #c是y前半部分,d是y后半部分
p1=Bignum(a,c) #递归运算ac,bd,(a-b)(d-c)
p2=Bignum(b,d)
p3=Bignum(a-b,d-c)
return p1*pow(10,2*n)+(p3+p1+p2)*pow(10,n)+p2
x=int(input("x="))
y=int(input("y="))
print(Bignum(x,y))
5.测试数据
X=99999999
Y=999999999
6程序运行结果
更多大学课业实验实训可关注公众号回复相关关键词
学艺不精,若有错误还望指点
以上是关于大整数乘法-算法设计与分析实验二的主要内容,如果未能解决你的问题,请参考以下文章