源代码: #include<cstdio> int m,n,q,ans=1; int main() { scanf("%d%d%d",&m,&n,&q); //m的n次方,对q的取余运算。 m%=q; //为避免m*m率先溢出,首当其冲,对其进行取余运算。 while (n) { if (n&1) ans=ans*m%q; n=n>>1; //位运算。 m=m*m%q; } printf("%d",ans); return 0; }
源代码: #include<cstdio> int m,n,q,ans=1; int main() { scanf("%d%d%d",&m,&n,&q); //m的n次方,对q的取余运算。 m%=q; //为避免m*m率先溢出,首当其冲,对其进行取余运算。 while (n) { if (n&1) ans=ans*m%q; n=n>>1; //位运算。 m=m*m%q; } printf("%d",ans); return 0; }