算法1.
首先直接地来设计这个算法:先求出a^b
int ans=1, i;
for(i=1;i<=b;i++)
ans*=a;
ans%=c;
这个算法的时间复杂度体现在for循环中,为O(b).
这个算法存在着明显的问题,如果a和b过大,很容易就会溢出。
那么,我们先来看看第一个改进方案:在讲这个方案之前,要先有这样一个公式:
a^b mod c=(a mod c)^b
引理:
(a *b) mod c =[ ( a mod c )* (b mod c) ] mod c ;
证明: 设 a mod c =d,b mod c= e;
则:a=t*c + d ; b=k*c + e ;
(a*b)mod c &