快速幂运用分治思想
显然有:
每次根据该公式分治计算即可。
#include<iostream> #include<cstdio> using namespace std; long long int b,p,k,ans=1; int main() { scanf("%lld%lld%lld",&b,&p,&k); // printf("%lld^%lld mod %lld=",b,p,k); if(k==1){ puts("0"); return 0; } while(p>0) { if(p&1) ans=ans*b%k; b=b*b%k; p>>=1; } printf("%lld\n",ans); return 0; }