题意
求关于xxx的同余方程ax≡1(mod b)a x \equiv 1 (mod\ b)ax≡1(mod b)的最小正整数解。
思路
对于方程ax≡b(mod m)a x \equiv b (mod\ m)ax≡b(mod m),可以看成ax−bax-bax−b是mmm的倍数,设是−y-y−y倍,那么就可以改写成方程:
ax+my=bax+my=bax+my=b
那么用欧几里得算法可以求出一组特解x0,y0x_0,y_0x0,y0,通过取模操作把x0x_0x0移到1∼b1\sim b1∼b中,即为答案。
代码
#include<cstdio>
long long a, b, x, y;
long long exgcd(long long a, long long b, long long &x, long long &y) {
if (!b) {
x = 1;
y = 0;
return a;
}
long long d = exgcd(b, a % b, x, y);
long long z = x;
x = y;
y = z - y * (a / b);
return d;
}
int main() {
scanf("%d %d", &a, &b);
exgcd(a, b, x, y);
printf("%d", (x % b + b) % b);
}