快速幂
题目链接
快速幂
题目描述
给你三个整数 \(a,b,p\),求 \(a^b \bmod p\)。
输入格式
输入只有一行三个整数,分别代表 \(a,b,p\)。
输出格式
输出一行一个字符串 \(a^b mod p=s\),其中 \(a,b,p\) 分别为题目给定的值, \(s\) 为运算结果。
输入
2 10 9
输出
2^10 mod 9=7
说明/提示
样例解释
\(2^{10} = 1024,1024 \bmod 9 = 7\)。
数据规模与约定
对于 \(100\%\) 的数据,保证 \(0\le a,b < 2^{31},a+b>0,2 \leq p \lt 2^{31}\)。
代码
- 时间复杂度:\(O(logb)\)
#include<bits/stdc++.h>
using namespace std;
int ksm(int a,int b,int p)
{
int res=1%p;
for(;b;b>>=1)
{
if(b&1)res=1ll*res*a%p;
a=1ll*a*a%p;
}
return res;
}
int main()
{
int a,b,p;
scanf("%d%d%d",&a,&b,&p);
printf("%d^%d mod %d=%d",a,b,p,ksm(a,b,p));
return 0;
}