递归快速幂与非递归快速幂模板
递归快速幂
(对大素数取模)
typedef long long ll;
ll Quick_pow(ll a,int n)
{
if(n == 0)
return 1;//出口为"a^0=1"
else if(n % 2 == 1)
return Quick_pow(a, n-1)*a;
else{
ll temp = Quick_pow(a, n/2);
return temp*temp;
}
}
虽然简洁,但会产生额外的空间开销。我们可以把递归改写为循环,来避免对栈空间的大量占用,即非递归快速幂
非递归快速幂
typedef long long ll;
ll Quick_pow(int a,int n)
{
int ans = 1;
while(n)
{
if(n&1)
ans *= a;
a *= a;
n >>= 1;
}
return ans;
}
这里以7^10为例:
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799128.html