ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

同余方程

2022-07-10 10:31:20  阅读:143  来源: 互联网

标签:方程 gcd int exgcd x0 同余


NC229005 【模板】同余方程(https://ac.nowcoder.com/discuss/926597)

点击查看代码
#include <bits/stdc++.h>
using namespace std;

#define int long long

int exgcd(int a,int b, int &x, int &y)
{
    if(a<b) return exgcd(b,a,y,x);
    if(b==0){
        x = 1; y = 0;
        return a;
    }
    else{
        int x1;
        int d = exgcd(b,a%b,x1,x);
        y = x1 - a/b * x;
        return d;
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);

    int t;cin >> t;
    while(t--)
    {
        int a,b;cin >> a >> b;
        int x,y;
        int m = exgcd(a,b,x,y);
        if(m!=1) cout << -1 << endl;
        else cout << (x % b + b) % b << endl;
    }

    return 0;
}


翡蜀定理 对任意的正整数a b,必然存在x y,使得ax+by=(a,b)
如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍。

线性同余方程:
给定整数a,b,m,求一个整数满足:a*x≡b(mod m),或给出无解。
因为未知数的次数为1,称之为线性同余方程。
求解过程:
a*x≡b(mod m), 可得a*x+m*y=b 这个方程有解的条件是:
gcd(a,m)|b 接下来利用exgcd先求出一组特解x0,y0满足a*x0+m*y0=gcd(a,m),然后x=x0/gcd(a,m)*b就是线性同余方程的一个解。
方程的通解是模m/gcd(a,m)与x同余的整数。

标签:方程,gcd,int,exgcd,x0,同余
来源: https://www.cnblogs.com/beiy/p/16462697.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有