快速幂运算

mac2024-08-07  53

1、求 a 的 b 次方对 p 取模的值 ,其中  1  a,b,p  

根据数学常识,每一个整数可以唯一表示为若干指数不重复的2的次幂的和。也就是说,如果b 在二进制表示下有k位,其中第i位的数字为(), 那么有      于是 

又因为 , 因此我们很容易通过k次递推求出每个成绩项,当 =1 的时候将该成绩项累积到答案中去,代码如下:

public class BitOperation1 { public static void main(String[] args) { int res = bitoperation(2, 3, 5); System.out.println(res); } public static int bitoperation(long a, long b, long p){ long ans = 1; while(b > 0){ if((b & 1) == 1) ans = ans * a % p; a = a * a % p; b = b >> 1; } return (int)ans; } }

 

 

 

最新回复(0)