Karatsuba算法(Python)

#Programming Assignment #1
#what's the product of the following two 64-digit numbers?


#Using karatsuba multiplication algorithm

def Karatsuba(x,y):
    if (len(str(x))) < 2 or (len(str(y))) < 2:
        return x*y
    else:
        #m这里不确定是否可以任意设置(实际上可以是任意正整数,对于长整数,为了便于计算,通常设置为较长整数宽度的一半)
        m=max(len(str(x)),len(str(y)))//2
        x1=x//int(pow(10,m))
        x0=x-x1*int(pow(10,m))
        y1 =y//int(pow(10, m))
        y0=y-y1*int(pow(10,m))
        z2 = Karatsuba(x1,y1)
        z0 = Karatsuba(x0,y0)
        z1 = Karatsuba((x1 + x0), (y1 + y0)) - z2 - z0
        return z2 * pow(10,2*m) + z1 * pow(10,m) + z0

result=Karatsuba(num1,num2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值