编程题:h0090.64位整数乘法
求 a 乘 b 对 p 取模的值。
### 输入格式:
第一行输入整数a (1≤a),第二行输入整数b (1≤b),第三行输入整数p (p≤10^18)。
### 输出格式:
输出一个整数,表示a*b mod p的值。
### 输入样例:
在这里给出一组输入。例如:
in
3
4
5
### 输出样例:
在这里给出相应的输出。例如:
out
2
答案:若无答案欢迎评论
(二进制思想) O(logn)
如果直接计算a乘b这会超过 long long 的最大范围,所以采用类似于快速幂的思想
把 b写成二进制形式,然后如果某位上为1就加上它a*(2^n)次方(n与这位的位置有关)
并且每次计算后取模就可以了
例:计算 3*7
7的二进制 111
3*(2^0)=3
3*(2^1)=6
3*(2^2)=12
### 输入格式:
第一行输入整数a (1≤a),第二行输入整数b (1≤b),第三行输入整数p (p≤10^18)。
### 输出格式:
输出一个整数,表示a*b mod p的值。
### 输入样例:
在这里给出一组输入。例如:
in
3
4
5
### 输出样例:
在这里给出相应的输出。例如:
out
2
答案:若无答案欢迎评论
(二进制思想) O(logn)
如果直接计算a乘b这会超过 long long 的最大范围,所以采用类似于快速幂的思想
把 b写成二进制形式,然后如果某位上为1就加上它a*(2^n)次方(n与这位的位置有关)
并且每次计算后取模就可以了
例:计算 3*7
7的二进制 111
3*(2^0)=3
3*(2^1)=6
3*(2^2)=12