- 64位整数乘法
题目
求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p的值。
数据范围
1≤a,b,p≤1018
输入样例:
3
4
5
输出样例:
2
思路分析:如果直接计算,结果就会超过long long的最大范围,我们一个可行的方法就是用类似于快速幂的思想将b表示成二进制数,如果b的当前位为1,就加上它的a的2的n次方,然后每次取模就可以了,可以看如下的例子
例:计算 3*7
7的二进制 111
3*(2^0)=3
3*(2^1)=6
3*(2^2)=12
我们知道37=21,而3+6+12也等于21,所以我们可以运用这个方法将计算简化,可以发现之后的每一次都是由前一次2得到,所以时间复杂度为log n,
下面看代码 `
#include<iostream>
using namespace std