qpow
✅ 快速幂
快速幂相关题目:
- 2961. 双模幂运算 [1451]
- 2550. 猴子碰撞的方法数 [1663]
- 372. 超级次方 [算术评级 5]
- 50. Pow(x, n) [算术评级 5]
1 | # python 自带快速幂库函数用于计算 x^y mod m |
CPP 手撕「快速幂」库函数
1 | // 本题 mod 很小,即使平方也不会超过 int 范围,所以不需要用 long long |
快速幂实现思路(workflow)如下图:
代码实现时,注意 n=−$2^{31}$ 的情况,取反后 n=$2^{31}$ 超出 int 最大值。可以转成 64 位 int 解决(即
long long
)
50. Pow(x, n) (包含负数与浮点数)
实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,$x^n$ )。
示例 1:
1 | 输入:x = 2.00000, n = 10 |
示例 2:
1 | 输入:x = 2.10000, n = 3 |
1️⃣ 快速幂(模板代码)
1 | class Solution { |
372. 超级次方
你的任务是计算 $a^b$ 对 1337
取模,a
是一个正整数,b
是一个非常大的正整数且会以数组形式给出。
示例 1:
1 | 输入:a = 2, b = [3] |
示例 2:
1 | 输入:a = 2, b = [1,0] |
1️⃣ DFS + 快速幂
1 | class Solution { |
2550. 猴子碰撞的方法数
现在有一个正凸多边形,其上共有 n
个顶点。顶点按顺时针方向从 0
到 n - 1
依次编号。每个顶点上 正好有一只猴子 。下图中是一个 6 个顶点的凸多边形。
每个猴子同时移动到相邻的顶点。顶点 i
的相邻顶点可以是:
- 顺时针方向的顶点
(i + 1) % n
,或 - 逆时针方向的顶点
(i - 1 + n) % n
。
如果移动后至少有两只猴子停留在同一个顶点上或者相交在一条边上,则会发生 碰撞 。
返回猴子至少发生 一次碰撞 的移动方法数。由于答案可能非常大,请返回对 109+7
取余后的结果。
注意,每只猴子只能移动一次。
示例 1:
1 | 输入:n = 3 |
1️⃣ 正难则反|快速幂
只有全部顺时针和全部逆时针这 2 种不会碰撞,所以只需要计算 $2^n-2$,这就需要用到快速幂。
- C++:手搓快速幂
- Python:使用内置
pow(x, n, mod)
快速幂库函数
1 | class Solution { |
1 | class Solution: |