快速幂

问题描述

  • 给定三个正整数a、b、m(a<109,b<106,1<m<109)求ab%m.

方法一 循环

  • 时间复杂度O(b)
  • 代码
typedef long long LL;
LL f(LL a, LL b, LL m)
{
	LL ans = 1;
	for (int i = 0; i < b; i++)
	{
		ans = ans * b % m;
	}
	return ans;
}

方法二 快速幂递归

typedef long long LL;
LL mypow(LL a, LL b, LL m)
{
	if (b == 0)
		return 1;
	if (b & 1)
		return a * mypow(a, b - 1, m) % m;
	else
	{
		LL temp = mypow(a, b / 2, m);
		return temp * temp % m;
	}
}

方法三 快速幂迭代

typedef long long LL;
LL mypow(LL a, LL b, LL m)
{
	LL ans = 1;
	while (b > 0)
	{
		if (b & 1) 
		{
			ans = ans * a % m;
		}
		a = a * a;
		b >> 1;
	}
	return ans;
}
posted @ 2021-08-15 00:25  小帆敲代码  阅读(3)  评论(0编辑  收藏  举报