快速幂,应该是属于数论吧,其实很简单的,就是比较固定的一个模板,当我们所求的幂次方比较大的时候,就要用到快速幂。
比如说x的y次幂(x^y),我们默认当幂次大于零的时候,分成了两种情况:
1,幂次为偶数的时候,我们直接不断求得x的平方的y/2次幂,即为答案,比如二的四次幂,因为四为偶数,所以我们求得2的平方的4/2次幂即为答案。
2,幂次为奇数的时候,我们不断求得x的平方的y/2次幂,然后在乘以一个x,即为答案,比如二的五次幂,因为五为奇数,所以我们求得2的平方的5/2次幂再乘以2即为答案。
这个快速幂算法大大降低了时间的复杂度,接下来是一段固定的模板代码:
#include <iostream>
#include <algorithm>
using namespace std;
int poww(int x,int y)
{
int s = 1;
while(y > 0)
{
if(y%2!=0)
{
s = s * x;
}
x = x * x;
y/=2;
}
return s;
}
int main()
{
int a,b;
cin >> a >> b;
printf("%d\n",poww(a,b));
return 0;
}
加油!