方法2: a=5;b=22;c=50; b的二进制表示为10110。 如果从左往右遍历该二进制序列(注意:方法1是从右往左),则a10110=a1011*a1011a1011=a*a1010a1010= a101*a101a101=a*a100a100=a a10* a10 a10 =a1 *a1a1 =a0 *a 看明白了吧,这个和方法一其实是一样的,只不过是从左往右遍历二进制序列而已。代码也差不多,只不过位置稍有些改变代码如下:int a_b_Mod_c(int a, int b, int c){ int digit[32]; int i, k, resualt = 1; i = 0; while(b){digit[i++] = b%2; b >>= 1; } for(k = i-1; k >= 0; k--) {resualt = (resualt * resualt) % c; if(digit[k] == 1) { resualt = (resualt * a) % c; } } return resualt;
}