用c语言写一段 a的b次方 modc 的取余运算代码,其中a,b,c均为长形整数
时间: 2024-10-09 16:16:01 浏览: 81
在C语言中,计算大整数的幂模运算可以使用递归或者迭代的方法,这里以迭代方式为例。因为直接的递归实现可能会导致栈溢出,特别是对于大数和高阶次的情况。以下是一个使用long long类型的迭代版本代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义计算modular exponentiation的函数
long long power(long long a, long long b, long long c) {
long long result = 1;
while (b > 0) {
// 如果b是偶数,先将a平方并除以c,这样可以减少乘法次数
if (b % 2 == 0) {
a = (a * a) % c;
b /= 2;
} else {
// 如果b是奇数,将当前结果乘以a,并更新a
result = (result * a) % c;
a = (a * a) % c; // 只需再做一次平方,因为b已经减去1
b--;
}
}
return result;
}
int main() {
long long a, b, c;
// 获取用户输入的a, b, c
scanf("%lld%lld%lld", &a, &b, &c);
printf("Result of (%lld)^%lld mod %lld is: %lld\n", a, b, c, power(a, b, c));
return 0;
}
```
这段代码会计算`a`的`b`次方对`c`取余的结果。
阅读全文