题目地址:
https://www.acwing.com/problem/content/description/91/
求 a a a的 b b b次方对 p p p取模的值。
输入格式:
三个整数
a
,
b
,
p
a,b,p
a,b,p,在同一行用空格隔开。
输出格式:
输出一个整数,表示
a
b
m
o
d
p
a^b \mod p
abmodp的值。
数据范围:
0
≤
a
,
b
≤
1
0
9
0≤a,b≤10^9
0≤a,b≤109
1
≤
p
≤
1
0
9
1≤p≤10^9
1≤p≤109
思路是快速幂。但是这里要注意 b = 0 , p = 1 b=0,p=1 b=0,p=1的情况,需要将 p = 1 p=1 p=1的情况判掉。快速幂可以参考https://blog.csdn.net/qq_46105170/article/details/116353002。代码如下:
#include <iostream>
using namespace std;
int main() {
long a, b, p;
cin >> a >> b >> p;
if (p == 1) puts("0");
else {
long res = 1;
while (b) {
if (b & 1) res = res * a % p;
a = a * a % p;
b >>= 1;
}
cout << res << endl;
}
return 0;
}
时间复杂度 O ( log b ) O(\log b) O(logb),空间 O ( 1 ) O(1) O(1)。