Raising Modulo Numbers-快速幂取模

update@2011-08-04

//a^n mod m
int exp_mod(int a,int n,int m){

    //x*y mod m = ((x%m) * (y%m))%m
    if(n == 1)
        return a % m;
    else if(n == 0)
        return 1 % m;
    if(n&1){//奇数 a^n = (a^(n-1))*a
        return ((a%m)*exp_mod(a,n-1,m)) % m;
    }
    else{//偶数 a^n = (a^(n>>1))^2
        int t = exp_mod(a,n>>1,m);
        return (t*t) % m;
    }
}





百练-Raising Modulo Numbers
很基础,先google下快速幂取模是怎么回事就能写出来了 注意快速幂的二分思想