一个关于大整数乘法的问题:位数不相等
传统大整数乘法 给定a,b(位数相等 设为N)
考虑到奇偶的情况
切分为
a1 (N-N/2 位),
a0(N/2位),
b1 (N-N/2 位),
b0(N/2位),
然后
c1 = a1*b1<<n;
c3 = a0*b0;
c2 = (a1*b0+a0*b1)<<N/2 = ((a1+a0)*(b1+b0)-a1*b1-a0*b0)<<N/2;
那么问题来了
对于子问题(a1+a0)*(b1+b0) 必须保证a1+a0的二进制位数等于b1+b0
反例如下:
a = 23,b = 19
二进制:
a = 10111;
b = 10011;
切分后
a1 = 101;
a0 = 11;
b1 = 100;
b0 = 11;
相加后
a1+a0 = 1000(16);
b1+b0 = 111(15);
两者位数不相同
((a1+a0)*(b1+b0)-a1*b1-a0*b0)<<N/2 不再适用 因为N变成了2个
那么该怎么解决呢?