P1082 [NOIP2012 提高组] 同余方程
题解
\(ax\ ≡\ 1\ (mod\ b) \implies ax\ =\ by+1 \implies ax-by\ =\ 1\ (y\in Z)\)
若 \(ax+by=c\) 有整数解,令 \(gcd(a,b)=e\) ,则有 \(a_1=\frac{a}{e}\) ,\(b_1=\frac{b}{e}\) 则有 \(a_1·e·x+b_1·e·y=c \implies e·(a_1·x+b_1·y)=c\)
又因为 \(c=1\) 所以 \(e=a_1·x+b_1·y=1\) ,其中 \(x,y\) 是可以任意取的整数,且 \(a_1\ b_1\) 互质 so \(e=gcd(a,b)=1\)

code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll check(ll a,ll b,ll c)
{
if(b==0)return 0;
ll x=check(b,a%b,c),y=(c-x*a)/b;
return y;
}
int main()
{
ll a,b;
cin>>a>>b;
ll c=__gcd(a,b);
ll y=check(a,b,c),x=(c-y*b)/a;
//printf("%d %d %d\n",x,y,c);
ll mod=b/c;
cout<<x%mod<<endl;
return 0;
}

浙公网安备 33010602011771号