求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p
的值。
数据范围
1≤a,b,p≤10^18
输入样例:
3
4
5
输出样例:
2
分析:我们知道两个long相乘的话,可能会越界,所以这里显然是不能直接的相乘的。由于任意一个整数都可以表示成2机制,那么我们按照二进制将乘法拆成加法,比如 a * 13 (13的二进制位1101) = a * 8 + a * 4 + a * 1。(当然,b个a相加肯定也是对的,但是不够好)
下面是AC代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
long a = cin.nextLong();
long b = cin.nextLong();
long p = cin.nextLong();
long res = 0;
while (b != 0) {
if ((b & 1) == 1) {
res = (res + a) % p;
}
a = 2 * a % p;
b >>= 1;
}
System.out.println(res);
}
}