同余方程
题目链接:ybt高效进阶6-3-1 / luogu P1082
题目大意
要你找一个最小的正整数 x 使得 ax 在 mod b 的意义下等于 1。
保证一定有解。
思路
直接变成 ax+by=1,然后因为保证有解,而且右边是
1
1
1,所以这就是唯一解。
然后记得
x
x
x 可能是负数,要搞回来。
代码
#include<cstdio>
#define ll long long
using namespace std;
ll a, b, x, y;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1; y = 0;
return a;
}
int re = exgcd(b, a % b, y, x);
y -= a / b * x;
return re;
}
int main() {
scanf("%lld %lld", &a, &b);
exgcd(a, b, x, y);
printf("%lld", (x + b) % b);
return 0;
}