埃及乘法
乘法可以看成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;
}
}