64位整除乘法
(1)题目内容
求a乘b对p取模的值
(2)输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
(3)输出格式
输出一个整数,表示a*b mod p
的值
(4)数据范围
1≤a,b,p≤10ⁿ(n = 18)
(5)输入样例
3
4
5
(6)输出样例
2
(7)分析
快速幂思想
a*b
a+a+a+...+a
a*1 = a
a*2 = 2a
a*4 = 4a
a*8 = 8a
...
a*(2^k) = 2k * a
a^b(上篇内容同理)
a*a*a*...*a
(8)代码实现 (解题思想同上篇内容)
#include<iostream>
using namespace std;
typedef unsigned long long ULL;
int main(){
ULL a,b,p;
cin>>a>>b>>p;
ULL res = 0;
while(b){
if(b & 1)
res = (res+a)%p;
b >>= 1;
a = a*2%p;
}
cout<<res<<endl;
return 0;
}