方法2:
a=5;b=22;c=50; b的二进制表示为10110。
如果从左往右遍历该二进制序列(注意:方法1是从右往左),则
a10110=a1011*a1011
a1011=a*a1010
a1010= a101*a101
a101=a*a100
a100=a a10* a10
a10 =a1 *a1
a1 =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;
}