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