【算法竞赛】数学专题:02.快速幂运算

1.通过递归实现快速幂运算:

int power(int a, int n)
{
	int ans;
	if (n == 0)//结束条件
		ans = 1;
	else
	{
		ans = power(a * a, n / 2);//递归调用
		if (n % 2 == 1)//若 n 为奇数,ans 需再乘一个 a。
			ans *= a;
	}
	return ans;
}

注:书写递归时需要先写特殊情况(出口)。

2.通过循环实现快速幂运算:

int power(int a, int n)
{
	int ans = 1;
	while (n)//当 n 不为 0 时
	{
		if (n % 2)//若 n 为奇数
			ans *= a;
		a = a * a;//底数平方
		n /= 2;//指数减半
	}
	return ans;
}

3.算法竞赛中,几乎所有的快速幂在运算时,所有的乘法都要取模。如:

int power(int a, int n)
{
	int ans = 1;
	while (n)//当 n 不为 0 时
	{
		if (n % 2)//若 n 为奇数
			ans = ans * a % MOD;
		a = a * a % MOD;//底数平方
		n /= 2;//指数减半
	}
	return ans;
}

4.快速幂运算的时间复杂度为O(logN).

上一篇:[渝粤教育] 广东-国家-开放大学 21秋期末考试服务标准化10011k1


下一篇:【渝粤教育】21秋期末考试管理学原理★10013k1