快速幂
快速幂
取模的运算法则
-
(a + b) % p = (a % p + b % p) % p
-
(a - b) % p = (a % p - b % p ) % p
-
(a * b) % p = (a % p * b % p ) % p
例如求2的5次方 5可以拆成1和4 对应5的二进制数0101
//求a的b模p的值(二进制写法) public class 快速幂 { static int a;//底数 static int b;//指数 static int p; public static void main(String[] args) { Scanner sc=new Scanner(System.in); a=sc.nextInt(); b=sc.nextInt(); p=sc.nextInt(); int res=1; while(b>0){ if((b&1)%2==1){ //遇到1就累乘现在的幂 res=(res*a)%p; } //每移位一次,幂累乘一次(不管取不取这个数) a *= a; //指数右移一位 b >>= 1; } System.out.println(res); } }