快速幂求解

来源:acwing 89

题目内容

求a的b次方对p取模的值。

输入格式

三个整数a,b,p,在同一行用空格隔开。

输出格式

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

数据范围

0 ≤ a, b, p ≤ 109

输入样例:

3 2 7

输出样例:

2

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

int main() {
int a, b, p;
cin >> a >> b >> p;
// 处理p为1时的情况,故%p
int res = 1 % p;
while(b) {
if(b & 1) {
res = res * 1ll * a % p;
}
a = a * 1ll * a % p;
b >>= 1;
}
cout << res << endl;

return 0;
}

64位整数乘法

来源: acwing 90

题目内容

ab对*p取模的值。

输入格式

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

输出格式

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

数据范围

1 ≤ abp ≤ 10 18

输入样例:

3

4

5

输出样例:

2

实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;

typedef unsigned long long ULL;

int main() {
ULL a, b, p;
cin >> a >> b >> p;
ULL result = 0;
while(b) {
if(b & 1) {
result = (result + a) % p;
}
a = (a << 1) % p;
b >>= 1;
}
cout << result << endl;

return 0;
}

最后更新: 2019年08月29日 16:24

原始链接: freesdw.github.io/2019/08/26/位运算应用/

× 请我吃巧克力吧
打赏二维码