c++写代码求 x mod y 的逆元。
时间: 2024-05-11 19:18:50 浏览: 65
DSA 数字签名 /C++/源代码
如果需要求解 $x$ 对模 $y$ 的逆元,需要满足 $x$ 与 $y$ 互质。一个常见的求解方法是使用扩展欧几里得算法。
具体的代码实现如下:
```c
int exgcd(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1, y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
int mod_inv(int x, int y) {
int a, b;
int d = exgcd(x, y, a, b);
if (d != 1) return -1; // 不存在逆元
return (a % y + y) % y;
}
```
其中,`exgcd` 函数是扩展欧几里得算法的实现,`mod_inv` 函数调用 `exgcd` 函数求解模数的逆元。如果不存在逆元,则返回 `-1`。
阅读全文