1. 程式人生 > >埃及乘法

埃及乘法

乘法可以看成n個a相加,那麼所需要的時間為O(n),那麼如何降低乘法的時間呢(降低為logn)?

埃及乘法演算法就是一種,分為奇數和偶數,(例如計算n*a)偶數從1開始是a,然後1✖2,a+a以此類推,奇數的時候是從1開始先加上一個a以後跟偶數是一樣的。

似乎先把兩個乘數按大小排出來然後小的數在前面會更快

我的程式碼(遞迴格式借鑑)

#include <bits/stdc++.h>
using namespace std;
int r;
int mu(int n,int a)
{
    if(n==1)
    return r+a;
    if(n%2)
    r+=a;
    return mu(n>>1,a+a);
}
main()
{
    int a,b;
    while(cin>>a>>b)
    {
        r=0;
        int t1=max(a,b);
        int t2=min(a,b);
        cout<<mu(t2,t1)<<endl;
    }
}