求关于 x 的同余方程 ax≡1(modb) 的最小正整数解。
可以将式子转化成ax + by = 1
那么可以用扩展欧几里得求得x和y的值,ax' + by' = d = gcd(a, b)
易得x = x' / d;
那么如何保证x为最小正整数解呢?
因为b是模数,所以x每次加b取模b即可
#include<bits/stdc++.h>
using namespace std;
int x, y;
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 main() {
int a, b;
cin >> a >> b;
int d = exgcd(a, b, x, y);
while(x < 0) x += b;
cout << x % b;
return 0;
}