埃及乘法
乘法可以看成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;} }轉載于:https://www.cnblogs.com/baccano-acmer/p/9791476.html
總結
- 上一篇: P4555 最长双回文串
- 下一篇: 牛客提高R5 A.同余方程