输入两个数 a, b,其中 b 极大。计算 a 的 b 次方对 1337 取模的结果。数据保证 a 在 int 范围内,b 小于 100 位,每个样例输入两行分别表示 a 和 b,每个样例输出一行表示:a 的 b 次方对 1337 取模的结果,使用C++实现
时间: 2023-07-14 16:14:18 浏览: 171
可以使用快速幂算法来解决这个问题,时间复杂度为 O(log b)。
具体实现代码如下:
```c++
#include <iostream>
using namespace std;
int pow_mod(int a, string b, int c) {
int res = 1;
int len = b.size();
for (int i = len - 1; i >= 0; i--) {
int digit = b[i] - '0';
int base = 1;
for (int j = 0; j < 4; j++) {
if (digit & 1) {
res = (res * a) % c;
}
digit >>= 1;
a = (a * a) % c;
}
}
return res;
}
int main() {
int a;
string b;
cin >> a >> b;
int res = pow_mod(a, b, 1337);
cout << res << endl;
return 0;
}
```
在这个实现中,我们将 b 存储为字符串,然后从高位到低位依次计算幂。在每一位上,如果该位是 1,就累乘上 a 的相应幂次,同时更新 a 的幂次。注意,在计算过程中需要对每一步结果取模,以避免溢出。
另外,由于 1337 是一个较小的质数,我们可以用多位二进制数来表示 b 的每一位,从而在每一次循环中计算 4 次 a 的平方,进一步提高计算效率。
阅读全文