Karatsuba 快速算法

转载:https://blog.csdn.net/lanchunhui/article/details/52450494?utm_source=copy
2. Karatsuba 快速算法
Karatsuba 快速乘积算法首先将两个整数分别一分为二。例如,a 和 b 各位 256 位的整数,那么使用 a1a1 和 b1b1 保存前 128 为,而 a0a0 和 b0b0 中保存后 128 位。分割后,aa 和 bb 可写成如下的形式。
{a=a1⋅10128+a0b=b1⋅10128+b0
{a=a1⋅10128+a0b=b1⋅10128+b0

所以将 a×ba×b 分割成四项式有如下等式:
a×b==(a1×10128+a0)(b110128+b0)
a1b1
z210256+(a0b1+a1b0)z110128+a0b0z0
a×b=(a1×10128+a0)(b110128+b0)=a1b1⏟z210256+(a0b1+a1b0)⏟z110128+a0b0⏟z0
首先根据 z0=a0⋅b0,z2=a1⋅b1z0=a0⋅b0,z2=a1⋅b1 计算 z0,z1z0,z1,然后利用以下等式:
(a0+a1)⋅(b0+b1)=z0+z1+z2
(a0+a1)⋅(b0+b1)=z0+z1+z2

因此:
z2 = a1 * b1
z0 = a0 * b0
z1 = (a0 + b0)(a1 + b1)-z2-z0

猜你喜欢

转载自blog.csdn.net/qq_34636222/article/details/83617178