牛客网0x01 基本算法-位运算
【牛客】C.64位整数乘法
求 a 乘 b 对 p 取模的值,其中 0 <= a,b,p <= 1 0 18 10^{18} 1018, p>0
输入描述:
第一行a,第二行b,第三行p。
输出描述:
一个整数,表示
a
×
b
a×b
a×b
m
o
d
mod
mod
p
p
p 的值。
示例输入
2
3
9
输出
6
题解
该题同理与 【牛客】A. a^b%p,把平方改为了乘法,思路还是将b表示为2进制,逐位相乘,逐次模。
package org.example;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long a, b, p, ans = 0;
a = in.nextLong();
b = in.nextLong();
p = in.nextLong();
while (b != 0) {
//b转二进制数,最后一位是1
if ((b % 2) != 0) { //或者(b & 1) ==1 //b转为2进制后当前为是1,ans需要加上a
ans = (ans + a) % p;
}
a = a * 2 % p;
//b右移一位
b >>= 1;
}
System.out.println(ans % p);
}
}