快速幂
快速幂
取模的运算法则
-
(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);
}
}

浙公网安备 33010602011771号