CRT & EXCRT 学习笔记
这玩意解决的是把同余方程组合并的问题。
CRT的核心思想和拉格朗日插值差不多,就是构造一组使得
有了思路后这玩意随便构造一下就出来了,式子里面出现了一些奇怪的逆元,所以要求模数互质
现在考虑扩展CRT,模数不互质了
本质思路是合并两个同余方程组
发现同余条件等价于
怎么求出其中的一个呢?其实也就是
扩展欧几里得即可
Code
#include <cstdio> #include <iostream> #define LL long long using namespace std; inline LL read() { LL res = 0, flag = 0; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') flag = 1; for(; isdigit(ch); ch = getchar()) res = (res << 1) + (res << 3) + (ch ^ 48); if(flag) res = ~res + 1; return res; } inline LL gcd(LL x, LL y) {return y ? gcd(y, x % y) : x;} inline void exgcd(LL a, LL b, LL &x, LL &y) { if(!b) x = 1, y = 0; else exgcd(b, a % b, y, x), y -= a / b * x; } LL n, a, m, A, M; int main() { n = read(), m = read(), a = read(); for(int i = 2; i <= n; ++i) { M = read(), A = read(); LL d = gcd(m, M), t = A - a, x, y, mod; if(t % d) return 0; exgcd(m, M, x, y); x = t / d * x % (M / d); if(x < 0) x += M / d; mod = m / d * M; a = (x * m + a) % mod; if(a < 0) a += mod; m = mod; } printf("%lld\n",a); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】