同余方程
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同余的整数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】