A ^ B Problem
11 100 7
4
利用公式a*a%c=((a%c)*a)%c,这样每一步都进行这种处理,这就解决了a^b可能太大存不下的问题。
#include<cstdio> int main(){ long long A,B,K; scanf("%lld%lld%lld",&A,&B,&K); long long ans=A; for(int i=1;i<B;i++) ans=(ans%K)*A%K; printf("%lld\n",ans); return 0; }但是时间复杂度并没有优化,所以肯定会超时。
快速幂算法依赖于以下明显的公式:
#include<cstdio> int mod(int a,int b,int k){ int ans=1; a=a%k; while(b>0){ if(b%2==1) ans=(ans*a)%k; b/=2; a=(a*a)%k; } return ans; } int main(){ int A,B,K; scanf("%d%d%d",&A,&B,&K); printf("%d\n",mod(A,B,K)); return 0; }