1. 题目描述
2. 解题思路
使用 50 Pow(x,n) 的解题思想,用于快速求解x
的n
次方。注意每次求快速幂后均需取模,防止数据溢出
。
3. 代码实现
class Solution {
const int MOD = 10;
public:
vector<int> getGoodIndices(vector<vector<int>>& variables, int target) {
vector<int> res;
int cnt = 0;
for (auto& num : variables) {
if (quickMul((quickMul(num[0], num[1], MOD)), num[2], num[3]) ==
target) {
res.push_back(cnt);
}
cnt++;
}
return res;
}
// 快速幂计算法则
int quickMul(int x, int N, int MOD) {
if (N == 0) {
return 1;
}
int y = quickMul(x, N / 2, MOD);
return N % 2 == 0 ? (y * y) % MOD : (y * y * x) % MOD;
}
};
4. 快速幂的两种实现方式
- 递归法实现
// 快速幂计算法则
int quickMul(int x, int N, int MOD) {
if (N == 0) {
return 1;
}
int y = quickMul(x, N / 2, MOD);
return N % 2 == 0 ? (y * y) % MOD : (y * y * x) % MOD;
}
- 迭代法实现
// 快速幂计算法则
int quickMul(int x, int N, int MOD) {
int res = 1;
// 用于保存每次幂乘后的值
int tmp = x;
while (N > 0) {
// 判断N是否能被2整除
if (N & 1)
res = res * tmp % MOD;
tmp = tmp * tmp % MOD;
N /= 2;
}
return res;
}