这个题算是快速幂的一个变体
回顾一下快速幂运算
a * a * a * a * a * a
b = 6
用倍增的思想,
a = a * a
b = 3
res = res * a
b = 2
a = a * a
b = 1
res = res * a
b = 0
那么乘法运算呢?a * b 可以看作b个a相加
a+a+a+a+a+a
b=6
同样用倍增的思想
a = 2 * a
b = 3
res += a;
b = 2
a = 2 * a
b = 1
res += a
b = 0
全部代码如下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long a = scanner.nextLong();
long b = scanner.nextLong();
long p = scanner.nextLong();
System.out.println(qmuti(a,b,p));
}
private static long qmuti(long a, long b, long p) {
// TODO Auto-generated method stub
long res = 0;
while(b > 0) {
if((b&1) == 1) {
res = (res + a) % p;
}
a = a * 2 % p;
b = b / 2;
}
return res;
}
}