“`
//大整數乘法
u=x*10^m+y;
v=w*10^m+z;
uv=xw*10^2m+(xz+wy)*10^m+yz;
大整數乘法1:
large_integer Prod(large_integer u,large_integer v)
{
large_integer x,y,w,z;
int n,m;
n=maximum(u的位數,v的位數);
if(u==0||v==0)
return 0;
else if(n<=threshold)
return 以通常形式獲得的uxv;
else{
m=floor(n/2);
x=u divide 10^m;y=u rem 10^m;
w=v divide 10^m;z=v rem 10^m;
return Prod(x,w)*10^2m+(Prod(x,z)*10^m+Prod(y,z));
}
}
//改進的大整數乘法
因爲 xw,xz+yw,yz
r=(x+y)(w+z)=xw+(xz+yw)+yz
推得xz+yw=r-xw-yz
//將前面所需要的四次乘法變爲3次乘法,同時增加線性時間的加減法
大整數乘法2:
large_integer Prod(large_integer u,large_integer v)
{
large_integer x,y,w,z,r,p,q;
int n,m;
n=maximum(u的位數,v的位數);
if(u==0||v==0)
return 0;
else if(n<=threshold)
return 以通常形式獲得的uxv;
else{
m=floor(n/2);
x=u divide 10^m;y=u rem 10^m;
w=v divide 10^m;z=v rem 10^m;
r=Prod(x+y,w+z);
p=Prod(x,w);
q=Prod(y,z)
return p*10^2m+(r-p-q)*10^m+Pq);
}
}“`