1,
(a*b)%c=( (a%c)*(b%c) )%c;
2,二进制优化乘方: 防止b很大时超出时间限制(时间复杂度O(logb)).
令 s=b/2; f=b%2; 则 aˆb=( (aˆs)ˆ2 ) * (aˆf).递归求解aˆs.
代码:
#include <stdio.h> int main() { int a,b,c,result=1; int digit[100]; scanf("%d%d%d",&a,&b,&c); int i=0; while(b) { digit[i++]=b%2; b>>=1; } for (--i;i>=0;--i) { result=(result*result)%c; if (digit[i]) { result=(a*result)%c; } } printf("%d/n",result); }