CRT从各种方面上都吊打exCRT啊......

短,好理解...

考虑构造bi使得bi % pi = ai,bi % pj = 0。然后全加起来就行了。

显然bi的构造就是ai * (P/pi) * inv(P/pi)。

LL a = 0, p = MO - 1;
for(int i = 1; i <= 4; i++) {a = (a + ans[i] * (p / mod[i]) % p * qpow(p / mod[i], mod[i] - 2, mod[i]) % p) % p;
}

exCRT:

是这样的,重新手推了一个短一点的模板。题是洛谷P3868 猜数字

 1 inline int exCRT(int n, int *a, int *b) {
 2     int t = a[1], p = b[1], x, y;
 3     for(int i = 2; i <= n; i++) {
 4         int g = exgcd(p, b[i], x, y);
 5         p = lcm(p, b[i]);
 6         t = (t - a[i]) % p;
 7         y = y * (t / g) % p;
 8         t = (a[i] + y * b[i]) % p;
 9     }
10     return t;
11 }

具体操作的时候开long long,龟速乘,记得全程避免负数。


先背为敬。

 1 #include <cstdio>
 2 #include <algorithm>
 3
 4 typedef long long LL;
 5 const int N = 100010;
 6
 7 LL p[N], a[N];
 8
 9 inline LL mod(LL a, LL c) {
10     if(c < 0) {
11         c = (~c) + 1;
12     }
13     while(a >= c) {
14         a -= c;
15     }
16     while(a < 0) {
17         a += c;
18     }
19     return a;
20 }
21 inline LL mul(LL a, LL b, LL c) {
22     LL ans = 0;
23     while(b) {
24         if(b & 1) {
25             ans = mod(ans + a, c);
26         }
27         a = mod(a << 1, c);
28         b = b >> 1;
29     }
30     return ans;
31 }
32 LL exgcd(LL a, LL b, LL &x, LL &y) {
33     if(!b) {
34         x = 1;
35         y = 0;
36         return a;
37     }
38     LL g = exgcd(b, a % b, x, y);
39     std::swap(x, y);
40     y -= (a / b) * x;
41     return g;
42 }
43
44 int main() {
45     int n;
46     scanf("%d", &n);
47     for(int i = 1; i <= n; i++) {
48         scanf("%lld%lld", &p[i], &a[i]);
49     }
50
51     LL A = a[1], P = p[1];
52     for(int i = 2; i <= n; i++) {
53         LL x, y;
54         LL C = (a[i] - A), g = exgcd(P, p[i], x, y);
55         C = (C % p[i] + p[i]) % p[i];
56         if(C % g) {
57             puts("-1");
58             return 0;
59         }
60
61         x = mul(x, C / g, P / g * p[i]);
62         A += mul(x, P, P / g * p[i]);
63         P *= p[i] / g;
64         A = mod(A, P);
65     }
66
67     // x === A mod P
68     LL x, y;
69     exgcd(P, 1, y, x);
70     x *= A;
71     x = (x % P + P) % P;
72     printf("%lld\n", x);
73     return 0;
74 }

AC代码

尝试合并两个同余方程:

判断有解后可用exgcd解方程。

至此合并完成。

所有方程逐一合并即可。

转载于:https://www.cnblogs.com/huyufeifei/p/10039410.html

CRT exCRT模板相关推荐

  1. 2021寒假笔记(数论)

    一.素数判定 Miller_Rabbin 引理: 费马小定理 a(p−1)=1(modp)a^(p-1)=1(mod\ p)a(p−1)=1(mod p) 二次探测定理 x2=1(modp)x^2=1 ...

  2. YBT 6 数学基础

    $补+写题ing$ 第 1 章 快速幂 序列的第 k 个数 link $solution:$ 板子 A 的 B 次方 link $solution:$ 板子 [NOIP2013] 转圈游戏 link ...

  3. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  4. 每周记录(4月底停更了qvq)

    1月6日 旋转卡壳 闵可夫斯基和 1月13日 期末复习 1月20日 网络流前4道题 一场失败的期末考试 写寒假作业 bzoj [HNOI2008]明明的烦恼(90分) prufer序列 正睿 画画图 ...

  5. 正睿19暑期B班DAY7 数论

    洛谷今日份:宜打chunithm(您虹了),sdvx(您暴了) 今日又是课件非常丰富份,本文仅作批注 首先要理解群,环,域的概念(这个会再提一次) 几个代数结构 群 是一个集合加上一个运算 满足封闭性 ...

  6. yyb要填的各种总结的坑

    已经写好啦的 如果有没有找到的东西,可以戳这里找找qwq 莫比乌斯反演&杜教筛 动态点分治 另外一个动态点分治 斜率优化 Splay 莫队 凸包 旋转卡壳 Manacher算法 Trie树 A ...

  7. 使用open***构建安全***

    使用open***构建安全*** ***概述 ×××(Virtual PrivateNetwork)虚拟专用网络,是依靠ISP和其他的NSP在公共网络中建立专用的数据通信网络的技术,可以为企业之间或者 ...

  8. nodejs linux模块全局,nodejs笔记一--模块,全局process对象;

    一.os模块可提供操作系统的一些基本信息,它的一些常用方法如下: var os = require("os"); var result = os.platform(); //查看操 ...

  9. [专题总结]组合数学

    好恶心的一个专题! 首先大致总结一下求组合数的方法: 暴力(复杂度为min(m,n-m))同时乘大数以及小数的逆元,其余部分分子分母相消. lucas:适用于模数小的时候,复杂度logpn 杨辉三角: ...

最新文章

  1. windows10下安装Linux7,win10Hyper-V下安装CentOS7
  2. 高通平台 /sys/module/lpm_levels/parameters/sleep_disabled节点
  3. 分享一张前端知识点思维导图
  4. 【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论
  5. IOS沙盒中的Documents、Library、tmp区别
  6. exchange2003客户端无法收发邮件的一次处理过程
  7. AIX 系统下做 rootvg
  8. 02 - 用wxStreamToTextRedirector和wxTextCtrl输出std::cout
  9. 项目管理学习——PMP 5A高分通过备考经验分享
  10. input type=file 选取文件路径时出现fakepath问题IE浏览器解决办法
  11. 域名解析后主机记录和记录值怎么填写?
  12. 利用python进行A/B测试
  13. Suspending console(s) (use no_console_suspend to debug) android4.0 OMAP4460
  14. 【《Real-Time Rendering 3rd》 提炼总结】(五) 第六章 · 纹理贴图及相关技术 The Texturing
  15. 英特尔芯片组系列 服务器,英特尔主板现在有几种架构,分别都是什么。都是对应什么系列CPU安装最好。说的越详细越好...
  16. LaTeX中的拼写及语法检查
  17. 女生到底还做java还是前端_女孩子想转行的话学前端好还是java,哪个更有发展?...
  18. Vue天地图之图层类型切换
  19. 远程视频监控:流媒体之FFmpeg+RTMP+Nginx+VLC
  20. TASK9 Boosting

热门文章

  1. 脑与神经科学3 脑神经影像上
  2. 矩阵分析与多元统计12 0-1矩阵 交换矩阵简介
  3. 一些.net命令行工具的使用
  4. 图解Win7下安装Borland C++ 3.1失败记
  5. About me 留言板
  6. 数据结构1_java---单链表的操作,约瑟夫问题
  7. 简单CSS3代码实现立方体以及3D骰子
  8. 啦啦啦 啦啦 啦 啦 啦 啦啦 啦 啦 啦
  9. 01 MySQL锁概述
  10. Celt Codec简单使用方法