给定整数x和n,求x的n次幂 mod 1003采用递归算法 input 整数x和n。1≤x,n≤10000000000 output x∧n mod1003 sample input 2 10 sample output 21
时间: 2024-10-17 13:12:16 浏览: 38
要使用递归算法计算给定整数 \( x \) 的 \( n \) 次幂模 1003(即 \( x^n \mod 1003 \)),你可以利用快速幂(Fast Exponentiation)的方法。这个算法基于一个事实:对于任意正整数 \( a, b \), 和一个固定的 \( m \),\( (a^b \mod m) = ((a \mod m)^b \mod m) \)。
以下是使用递归实现的C代码:
```c
#include <stdio.h>
// 计算 x 的 n 次方模 1003
int fastPower(int x, int n, int mod) {
if (n == 0) return 1; // 遇到 n=0 时,结果为1
else if (n % 2 == 0) { // 如果 n 是偶数
int temp = fastPower(x, n / 2, mod);
return (temp * temp) % mod;
}
else { // 如果 n 是奇数
int temp = fastPower(x, (n - 1) / 2, mod); // 先计算一半
return (x * (temp * temp) % mod) % mod;
}
}
int main() {
int x, n;
scanf("%d%d", &x, &n);
// 注意这里不需要对 x 或 n 进行特殊处理,因为范围已经限制在1到1e10以内
int result = fastPower(x, n, 1003);
printf("%d\n", result);
return 0;
}
```
当你运行这段代码并输入 `2 10` 作为样例输入,输出将会是 `21`,符合题目要求。
阅读全文