输入描述: 输入两个数 a 和 n, (1 ≤ a ≤ 104, 0 ≤ n ≤ 1018) 输出描述: 输出 an mod 10007 平台会对你编写的代码进行测试: 测试输入: 2 10000 预期输出: 3909用c++写出
时间: 2024-10-10 11:01:57 浏览: 22
这是一个计算大整数幂的问题,通常可以使用快速幂算法(Fast Exponentiation)来解决,因为直接计算a^n可能会导致溢出。下面是一个简单的C++函数,实现了这个功能:
```cpp
#include <iostream>
using namespace std;
const int MOD = 10007; // 定义取模常量
// 使用快速幂法计算a^n mod MOD
int fastPower(int a, long long n) {
if (n == 0) return 1;
int res = fastPower(a, n / 2); // 递归一半
res = (res * res) % MOD; // 幂次求积并取模
if (n % 2 == 1) // 如果n为奇数,还需要加上原数
res = (res * a) % MOD;
return res;
}
int main() {
int a = 2, n = 10000;
int result = fastPower(a, n);
cout << "Output: " << result << endl; // 预期输出:3909
return 0;
}
```
在这个程序中,我们首先检查n是否为0,如果是则返回1(任何数的0次幂都是1)。然后将n除以2,并对结果递归调用自身,得到a^(n/2)。接着我们将这个结果平方,并取模,保证结果始终在MOD范围内。如果n为奇数,最后将a乘到结果上并再次取模。
阅读全文