题目地址:
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)。