算法背景:
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]);)得到每一个小数相乘的结果之后,就可以进行相加来得到最终结果