扩展欧几里得算法求逆元,用C语言
时间: 2023-09-30 07:06:13 浏览: 168
下面是用C语言实现扩展欧几里得算法求逆元的示例代码:
```c
#include <stdio.h>
// 扩展欧几里得算法
int extendedEuclidean(int a, int b, int* x, int* y) {
if (b == 0) {
*x = 1;
*y = 0;
return a;
}
int x1, y1;
int gcd = extendedEuclidean(b, a % b, &x1, &y1);
*x = y1;
*y = x1 - (a / b) * y1;
return gcd;
}
// 求逆元
int modInverse(int a, int m) {
int x, y;
int gcd = extendedEuclidean(a, m, &x, &y);
if (gcd != 1) {
printf("逆元不存在\n");
return -1;
}
// 将结果调整到[0, m)范围内
return (x % m + m) % m;
}
int main() {
int a, m;
printf("请输入整数a和模m:");
scanf("%d %d", &a, &m);
int inverse = modInverse(a, m);
if (inverse != -1) {
printf("%d在模%d下的逆元为:%d\n", a, m, inverse);
}
return 0;
}
```
以上代码实现了求逆元的功能,通过扩展欧几里得算法计算出a在模m下的逆元。在主函数中,用户需要输入整数a和模m的值,程序会输出计算结果。如果逆元不存在,则会输出"逆元不存在"的提示信息。
请注意,输入的整数a和模m应该是正整数,并且m应该大于0。另外,由于逆元可能是负数,为了保证结果在[0, m)范围内,代码中使用了调整操作 `(x % m + m) % m`。
阅读全文