求 a 乘 b 对 p
取模的值。
输入格式
第一行输入整数a
,第二行输入整数b,第三行输入整数p
。
输出格式
输出一个整数,表示a*b mod p
的值。
数据范围
1≤a,b,p≤1018
输入样例:
复制代码
1
2
3
43 4 5
输出样例:
复制代码
1
22
思路:这里由于a,b,p都<=10^18,已经是long long的极限,所以直接相乘必定一处。不知大家做过a^b%p这道题吗?这里我们也可以这样用二进制来,比如 3 7 7,7的二进制为111,3*7可以分成3*1+3*2+3*4。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include<iostream> #include<cstdio> #include<cstring> #include<vector> #define ll long long using namespace std; int main() { ll a,b,p; scanf("%lld%lld%lld",&a,&b,&p); ll res = 0; while(b) { if(b&1) res = (res+a)%p; a = 2*a%p; b >>= 1; } cout << res << endl; return 0; }
最后
以上就是深情大地最近收集整理的关于快速幂求a*b%p的全部内容,更多相关快速幂求a*b%p内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复