用c语言实现扩展欧几里德算法求模逆元,要能键盘输入
时间: 2023-10-10 08:12:53 浏览: 96
扩展欧几里得算法求逆元
5星 · 资源好评率100%
下面是用C语言实现扩展欧几里德算法求模逆元的代码,其中包括键盘输入和输出:
```c
#include <stdio.h>
int extended_gcd(int a, int b, int *x, int *y) {
if (b == 0) {
*x = 1;
*y = 0;
return a;
}
int gcd = extended_gcd(b, a % b, x, y);
int tmp = *x;
*x = *y;
*y = tmp - a / b * (*y);
return gcd;
}
int mod_inverse(int a, int m) {
int x, y;
int gcd = extended_gcd(a, m, &x, &y);
if (gcd != 1) {
printf("No inverse exists!\n");
return -1;
} else {
x = (x % m + m) % m;
return x;
}
}
int main() {
int a, m;
printf("Enter a and m: ");
scanf("%d %d", &a, &m);
int inv = mod_inverse(a, m);
if (inv != -1)
printf("The inverse of %d modulo %d is %d\n", a, m, inv);
return 0;
}
```
在上面的程序中,我们定义了两个函数`extended_gcd`和`mod_inverse`,分别实现了扩展欧几里德算法和模逆元的计算。在`main`函数中,我们通过键盘输入获取了`a`和`m`的值,并调用`mod_inverse`函数计算模逆元,最后输出结果。
需要注意的是,如果输入的`a`和`m`不互质,则模逆元不存在,我们在`mod_inverse`函数中进行了判断并给出了提示。
阅读全文