递归快速幂与非递归快速幂模板

 

 递归快速幂

(对大素数取模)

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为例:

posted @ 2021-08-22 21:33  泥烟  阅读(23)  评论(0编辑  收藏  举报