求 a 的 b 次方对 p 取模的值。c++
时间: 2023-12-18 21:49:47 浏览: 42
可以使用快速幂算法来求解,具体步骤如下:
1. 将 b 转化为二进制表示,例如,如果 b = 13,二进制表示为 1101。
2. 从最低位(即右侧)开始,依次考虑每一位。如果这一位为 1,就将 a 的对应幂次乘起来,否则不做处理。
3. 每乘一次就对 p 取模,避免数值溢出。
4. 在每一步中,都将 a 的幂次平方,以便在下一步中使用。
5. 最终得到的结果即为所求。
下面给出 Python 代码实现:
```python
def power_mod(a, b, p):
res = 1
while b > 0:
if b & 1 == 1:
res = (res * a) % p
a = (a * a) % p
b = b >> 1
return res
```
其中,& 表示按位与运算,>> 表示右移运算。
相关问题
求 a 的 b 次方对 p 取模的值。
可以使用快速幂算法来解决这个问题,具体步骤如下:
1. 将 b 转化为二进制数,例如 b = 13 转化为二进制数为 1101。
2. 从右向左遍历二进制数,对于每个位置上的 1,将 a 的对应次幂乘起来,并对 p 取模。对于每个位置上的 0,则不进行操作。
3. 最终得到的结果就是 a 的 b 次方对 p 取模的值。
下面是一个 Python 的实现示例:
```python
def power_mod(a, b, p):
result = 1
while b > 0:
if b % 2 == 1:
result = (result * a) % p
a = (a * a) % p
b //= 2
return result
```
其中,`a` 表示底数,`b` 表示指数,`p` 表示取模的数。在每次循环中,如果当前二进制位是 1,则将 `result` 乘上 `a` 的对应次幂并对 `p` 取模;否则,只将 `a` 的平方对 `p` 取模。最后返回 `result` 即可。
用python求 a 的 b 次方对 p 取模的值
同样是使用快速幂算法,下面是一个 Python 的实现:
```python
def pow_mod(a: int, b: int, p: int) -> int:
if b == 0:
return 1 % p
t = pow_mod(a, b // 2, p)
t = (t * t) % p
if b % 2 == 1:
t = (t * a) % p
return t
a, b, p = map(int, input().split())
ans = pow_mod(a, b, p)
print(ans)
```
其中 `//` 表示整数除法,`%` 表示取余运算。这个实现同样具有 O(log b) 的时间复杂度。