运用C++写一个代码:给定n组ai,bi,pi,对于每组数据,求出ai^bi%pi的值
时间: 2024-10-08 15:16:43 浏览: 23
在C++中,你可以使用`std::vector`存储输入的数据,并通过`std::map`或者一个数组来记录每个指数对应的模运算结果的缓存,利用指数的性质避免重复计算。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
// 定义函数来快速计算 ai^bi % pi
unsigned long long fast_pow(unsigned long long a, unsigned long long b, unsigned long long pi) {
unsigned long long result = 1;
while (b > 0) {
if (b & 1) // 如果b是奇数,则a需要乘到结果上
result = (result * a) % pi;
a = (a * a) % pi; // 将a自乘,减少循环次数
b >>= 1; // b除以2,右移位操作
}
return result;
}
int main() {
int n;
std::cin >> n;
std::vector<std::array<unsigned long long, 3>> input(n);
for (int i = 0; i < n; ++i) {
std::cin >> input[i][0] >> input[i][1] >> input[i][2]; // ai, bi, pi
}
std::unordered_map<unsigned long long, unsigned long long> cache; // 使用哈希表缓存中间结果
for (const auto& [ai, bi, pi] : input) {
if (cache.find(bi) != cache.end()) { // 如果已经计算过这个指数,直接用结果
unsigned long long power_result = cache[bi];
} else {
power_result = fast_pow(ai, bi, pi); // 计算并保存到缓存
cache[bi] = power_result;
}
std::cout << power_result << '\n'; // 输出 ai^bi % pi 的值
}
return 0;
}
```
阅读全文