题解
a x = 1 ( m o d b ) ax=1\,(mod\,b) ax=1(modb)
等同于 a x + b y = 1 ax+by=1 ax+by=1
扩展里的板子贴一下就好
最后取最小的x正整数
x = x m i n + k b x=x_{min}+kb x=xmin+kb
x m i n = x % b x_{min}=x\,\%\,b xmin=x%b
由于x可能本来就是负的,为了保证是正整数,在+b%b就好了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a, b;
ll exgcd(ll a, ll b, ll &d, ll &x, ll &y) {
if (b == 0) {
d = a;
x = 1;
y = 0;
} else {
exgcd(b, a % b, d, x, y);
ll tmp = x;
x = y;
y = tmp - a / b * y;
}
}
int main() {
ios::sync_with_stdio(0);
cin >> a >> b;
ll x, y, d;
exgcd(a, b, d, x, y);
//x 可能本身就是负的
cout << (x % b + b) % b << endl;
return 0;
}