题目链接:https://www.luogu.org/problemnew/show/P1082
题目大意:求关于
x
x
x 的同余方程
a
∗
x
≡
1
(
m
o
d
b
)
a*x≡1(mod\ b)
a∗x≡1(mod b) 的最小正整数解。
根据方程,我们可以得出 a ∗ x − 1 a*x-1 a∗x−1 是 b b b 的整数倍,假设为 − y -y −y 倍,则有 a ∗ x + b ∗ y = 1 a*x+b*y=1 a∗x+b∗y=1,可以利用扩展欧几里得算法求解。
#include<iostream>
using namespace std;
typedef long long ll;
int a,b,m,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, x, y);
int z = x; x = y; y = z - y * (a/b);
return d;
}
int main()
{
cin>>a>>b;
exgcd(a,b,x,y);
cout<<(x%b+b)%b<<endl;
return 0;
}