我是靠谱客的博主 深情大地,这篇文章主要介绍快速幂求a*b%p,现在分享给大家,希望可以做个参考。

求 a 乘 b 对 p

取模的值。

输入格式

第一行输入整数a

,第二行输入整数b,第三行输入整数p

输出格式

输出一个整数,表示a*b mod p的值。

数据范围

1≤a,b,p≤1018

 

输入样例:

复制代码
1
2
3
4
3 4 5

输出样例:

复制代码
1
2
2

思路:这里由于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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部