查了一下書,知道了這樣一個公式,這樣昨天二分法的疑問就可以解決了,也可以用迭代法實現了:看來吳文虎編寫的書還挺配套的.

也就是 a^b%n=((a^b-1)*a)%n====>(a*b)%n=((a%n)*b)%n===>a^b%n=(((a^(b/2))%n)*a^(b/2))%n
//迭代法
int modexp2(int a,int b,int n)
{
    
int r;
    r
=a%n;
    
for(int i=0;i<b-1;i++)
        r
=(r*a)%n;
    
return r;
}

書中還說可以提高效率,研究后再說.
(a^b)%n=(a^(b/2)%n * a^(b/2)%n)%n
根據這個公式,討論奇數和偶數處理
int modExp(int a, int b, int n)
{
    
int d=1,r=a;
    
while(b){
        
if(b%2==1){d=d*r%n;}
        r
=r*r%n;
        b
=b/2;
    }

    
return d;
}