C语言求解a在模b下的逆元
时间: 2024-02-28 13:52:51 浏览: 26
要求a在模b下的逆元,可以使用扩展欧几里得算法求解。具体步骤如下:
1. 首先判断a和b是否互质,如果不互质,则a在模b下不存在逆元。
2. 使用扩展欧几里得算法求解a和b的最大公约数gcd,以及x和y的值,使得ax+by=gcd(a,b)。
3. 如果gcd(a,b)不等于1,则a在模b下不存在逆元。
4. 如果gcd(a,b)等于1,则a在模b下的逆元为x mod b。
下面是C语言代码实现:
```c
#include <stdio.h>
int ext_gcd(int a, int b, int *x, int *y)
{
if (b == 0) {
*x = 1;
*y = 0;
return a;
}
int gcd = ext_gcd(b, a % b, y, x);
*y -= a / b * (*x);
return gcd;
}
int mod_inverse(int a, int b)
{
int x, y;
int gcd = ext_gcd(a, b, &x, &y);
if (gcd != 1) {
printf("Error: %d is not invertible mod %d.\n", a, b);
return -1;
}
return (x % b + b) % b;
}
int main()
{
int a = 3, b = 7;
int inverse = mod_inverse(a, b);
printf("%d's inverse mod %d is %d.\n", a, b, inverse);
return 0;
}
```
输出:
```
3's inverse mod 7 is 5.
```
注意,扩展欧几里得算法中x和y的值可能为负数,需要进行调整,使得x mod b为正数。