用Karatsuba算法解决大数乘法问题

算法背景:

Karatsuba是Anatoly Karatsuba在1960年发现了这个算法,并在1962年发表。这个算法是一种快速乘法算法,可以解决两个位数比较多的数的乘法。

算法原理:

Karatsuba算法的基本思想是将两个大数分成两段,然后通过三次乘法运算来得出结果。

分解:

x = x0*10^n + x1

y = y0*10^n +y1

合并:

x*y = (x0*10^n + x1)*(y0*10^n +y1)

      =(x0*y0)*10^2n + (x0*y1+x1*y0)*10^n + (x1*y1)

只需要对x0*y0、x0*y1+y1*x0 和 x1*y1进行求解即可得到x*y的结果 

例如:12345和6789相乘,

12345 = 12* 10 ^3 +345
6789 = 6 * 10^3 + 789
12345*6789

= (12 *10^3 +345) * (6 *10^3 +789)
=12 * 6 * 10^6 + (12 * 789 +345 *6)*10^3 + 345*789

在得知karatsuba算法是如何运算之后,可以对分解后的小数进行递推(例如:return multiply(p[0],q[0])*result*result +(multiply(p[0],q[1])+multiply(p[1],q[0]))*result + multiply(p[1],q[1]);)得到每一个小数相乘的结果之后,就可以进行相加来得到最终结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值