快速幂
快速幂百度百科定义
利用位运算来实现加速。
实现代码
#include<iostream>
using namespace std;
//long long quickpower(long long x, long long y)
//{
// long long ans = 1, cnt = x;
// while (y)
// {
// if (y & 1)
// {
// ans *= cnt;
// }
// cnt *= cnt;
// y >>= 1;
// }
// return ans;
//}
//这个是递归求法。
//一直不理解递归,今天看了很久,终于有点明白,这里做简单记录。
long long quickpower(long long a, long long i) { //a的i次方
if (i == 0) return 1; //①这句话是递归出口
long long temp = quickpower(a, i >> 1); //②这里对当前位的前一位求
temp = temp * temp; //④倒数第二个函数执行这句话时,无意义。
//⑥在其他的位置,这句话的意思是:因为temp是前面的几位求出来的,这里到了这一位,先给他平方,因为相当于前移了一位,
//又由于在指数位置,所以平方。
if (i & 1) temp = temp * a; //③这句话在倒数第二个函数(若有),一定会执行
//⑤同时,这句话就使得temp是a的一倍。之后再对temp求平方,就会一直是a的2的n次方。
return temp;
}
int main()
{
long long x, y, ans;
cin >> x >> y;
ans = quickpower(x, y);
cout << ans;
return 0;
}
我对递归的方法做了详细注释,也是我自己的理解。
谢谢阅读!