回 帖 发 新 帖 刷新版面

主题:求助:大整数乘法 分三段 怎么使它减为5次乘法的?

用分治法求两个n位的大整数u和v的乘积时,将u和v分割为n/3位

的3段.证明可以用5次n/3位整数的乘法求得uv值.设计算法,并

求复杂性.

将u分成u1,u2,u3三段,v分成v1,v2,v3三段
则:u*v可分为:
u1*v1
u3*v3
u1*v2+u2*v1
u1*v3+u2*v2+u3*v1
u2*v3+u3*v2

回复列表 (共6个回复)

沙发


有没有会的啊,急~~~,怎么把上面9个乘法改写成只要计算5次乘法就可以了啊。。。。。。

板凳

u1*v1,u1*v2,u1*v3,u2*v2,u2*v3
就这五个你把结果分别存起来,用的时候再调用就行了

3 楼

不行啊,用那五个乘法得不出结果.还有以下四个式子求不出来...
u3*v3
u2*v1
u3*v1
u3*v2
那位大大帮帮忙,把它简化一下啊..

4 楼

因为结果也只要3段,所以高位的不必去理会。

5 楼

见我的blog。

6 楼

看了,不过就是得不出结果
经过这几天的学习
终于凑出了结果,呵呵:
五个乘法为:
M1=u1*v1
M2=u3*v3
M3=(u1+u2+u3)*(v1+v2+v3)
M4=(u1-u2+u3)*(v1-v2+v3)
M5=(u1-2*u2+4*u3)*(v1-2v2+4v3)
则:
u1*v1=M1
u3*v3=M2
u1*v2+u2*v1=(2M1-6M2+M3)/6+u1*v1/2-2u3*v3
u1*v3+u2*v2+u3*v1=(M1+M2)/2-u1*v1-u3*v3
u2*v3+u3*v2=(M1+3M2-M3)/6-u1*v1/2+2u3*v3
这样就只用五次乘法了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册