大整數乘法

“`
//大整數乘法

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);


   }

}“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章