题目大意:
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。
输入输出格式
输入格式:
三个整数b,p,k.
输出格式:
输出“b^p mod k=s”
s为运算结果
例如:
输入样例#1:
2 10 9
输出样例#1:
2^10 mod 9=7
输入样例#2:
4523 59 7762
输出样例#2:
4523^59 mod 7762=6275
思路分析:
每次位运算之后都对结果进行取模运算,结果不要忘记取模!!!!!
AC代码:
#include<bits/stdc++.h>
using namespace std;
long long b,a,p,k,ans=1,c;
int main()
{
scanf("%lld %lld %lld",&b,&p,&k);
a=b;c=p;
while(p>0)//快速幂
{
if(p%2!=0)
ans=ans*b%k;//如果p为单数,乘到ans里面去,然后取模
b=b*b%k;//每次运算都取模
p=p>>1; //用位运算除2,可能会快一点
}
printf("%lld^%lld mod %lld=%lld",a,c,k,ans%k);//输出
return 0;
}