P1082 同余方程
题面:https://www.luogu.org/problemnew/show/P1082
本题即扩欧求乘法逆元,注意我们将要求出来的x,y, 仅仅保证满足ax+by=1,而 x 不一定是最小正整数解。有可能太大,也有可能是负数。这依然可以解决,那就是,x批量地减去或加上b,能保证 ax+by=1:
ax+by=1
ax+by+k×ba−k×ba=1
a(x+kb)+(y−ka)b=1
Code:
#include <iostream>
#include <cstdio>
using namespace std;
int a,b,x,y,k;
void exgcd(int a,int b)
{
if(b==0)
{
x=1;
y=0;
return;
}
exgcd(b,a%b);
k=x;
x=y;
y=k-a/b*y;
return;
}
int main()
{
ios::sync_with_stdio(false);
cin>>a>>b;
exgcd(a,b);
cout<<(x+b)%b;
}