【快速幂】A的B次方

题目描述

给出三个整数 a,b,m,求 abmodm 的值。

输入

一行三个整数 a,b,m

 

对于全部数据,1≤a,b,m≤109

 

 

输出

一个整数,表示 abmodm 的值。

样例输入

2 100 1007

样例输出

169

题解

这题就是一个快速幂的模板

对于 a^b,如果b是偶数:a^b=a^(b/2) * a^(b/2);如果b是奇数:a^b=a^(b/2) *a^(b/2) *a  (b/2向下取整)。

(a*b) %m =[(a%m) * (b%m)] %m

代码如下:

#include<iostream>
using namespace std;
#define ll long long
ll quickpow(ll a,ll b,ll m)
{
	if(b==1)
		return a;
	else if(b%2==0)
	{
		ll x=quickpow(a,b/2,m);
		return x*x%m;
	}
	else
	{
		ll x=quickpow(a,b/2,m);
		x=x*x%m;
		x=a*x%m;
		return x;
	}
}
int main()
{
	ll a,b,m;
	cin>>a>>b>>m;
	cout<<quickpow(a,b,m)<<endl;
	return 0;
}

 

点赞