题目链接洛谷P1226
#include<bits/stdc++.h> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)); #define ll long long const int INF = 0x3f3f3f3f; ll quick(ll a,ll b,ll c)//每步都要mod c { ll ans=1,base=a%c;//ans为答案,base为a^(2^n) while(b)//比如为11则他的二进制位1101,如果没用完就可以继续 { if(b&1)//位运算,如果b的最后一位是1则答案*ans ans=ans*base%c; base=base*base%c;//base自乘 b>>=1;//位运算,b向右移一位,如1101变成110把最右边的1移除了 } ans=ans%c; return ans; } int main() { ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c); ll ans; ans=quick(a,b,c); printf("%lld^%lld mod %lld=%lld\n",a,b,c,ans); return 0; }