P1082 [NOIP2012 提高组] 同余方程

原题链接
学习链接

题解

ax  1 (mod b)ax = by+1axby = 1 (yZ)

ax+by=c 有整数解,令 gcd(a,b)=e ,则有 a1=aeb1=be 则有 a1·e·x+b1·e·y=ce·(a1·x+b1·y)=c
又因为 c=1 所以 e=a1·x+b1·y=1 ,其中 x,y 是可以任意取的整数,且 a1 b1 互质 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 @   纯粹的  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示