You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.0 KiB

[题目传送门](https://www.acwing.com/problem/content/description/91/)
### 一、题目描述
求 $a$ 的 $b$ 次方对 $p$ 取模的值。
### 二、解题方法
一看到这道题,就可以知道是快速幂。
这道题的重点是快速幂,那我就来认真讲讲。
快速幂是使用二进制的思想来在 $O(logn)$ 的时间内解决幂的问题的方法。
**举个栗子**
$7$的$10$次方
计算思路:
$10 = (1010)_2$
从右向左
$7^1=7$
$7^2 = 7^1 * 7^1$
$7^4 = 7^2 * 7^2$
$7^8 = 7^4 * 7^4$
如上面的办法,我们只需要计算$4$次,成倍的翻番,而不用最笨的乘$10$次!所得的结果相乘或不断取模就行了。
### 三、实现代码
```c++
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
LL a, b, p, res = 1;
cin >> a >> b >> p;
while (b) {
if (b & 1) res = res * a % p;
a = a * a % p;
b >>= 1;
}
printf("%lld\n", res % p);
return 0;
}
```