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;
}

posted @ 2024-02-11 00:24  纯粹的  阅读(34)  评论(0)    收藏  举报