引入
求N的M次方%Q。
有次方,可能会需要高精度,但是结果又%Q,∴可以根据同余,边算乘方边取模。
我们可以用分治解决。
例题
分析
快速幂裸题。
代码
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define full(a,b) memset(a,b,sizeof a)
int b,p,k;
long long dfs(int x,int tot,int m)//返回long long
{
if(!tot) return 1;//0次幂为1
if(tot&1) return x*dfs(x,tot-1,m)%m;//是奇数转化为偶数
long long num=dfs(x,tot/2,m)%m;//只算tot/2,优化
//注意,中间可能超int,所以开long long
return num*num%m;//同余
}
int main()
{
scanf("%d%d%d",&b,&p,&k);
printf("%d^%d mod %d=%lld",b,p,k,dfs(b,p,k));
}