P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT
不保证模数互质
\]
CRT戳这里
来一手数学归纳法
设已经求出前 \(k - 1\) 组的一个解 \(q\)
设 \(M = \prod_{i = 1}^{k - 1}a_{i}\)
我们知道前 \(k - 1\) 组的通解为 \(q + xM\)
现在考虑第 \(k\) 组方程
设存在一 \(x\) 满足
\]
移一下项
\]
于是很愉快的解一下同余方程即可
如此, 我们使用扩展欧几里得算法 \(n\) 次, 便求出了方程组的解
复杂度 \(O(n \log n)\)
P4777 【模板】扩展中国剩余定理(EXCRT)
题目描述
给定 n组非负整数 a_i, b_i 求解关于 x的方程组的最小非负整数解。
Solution
注意中间运算会爆 \(longlong\) ,使用龟速乘
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
#define REP(i, x, y) for(LL i = (x);i <= (y);i++)
using namespace std;
LL RD(){
LL out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const LL maxn = 200019;
LL num, a[maxn], b[maxn];
LL x, y;
LL Q_mul(LL a, LL b, LL mod){
LL ans = 0;
while(b){
if(b & 1)ans = (ans + a) % mod;
a = (a + a) % mod;
b >>= 1;
}
return ans % mod;
}
LL exgcd(LL a, LL b, LL &x, LL &y){
if(!b){x = 1, y = 0;return a;}
LL d = exgcd(b, a % b, x, y);
LL temp = x;x = y;y = temp - (a / b) * y;
return d;
}
LL EXCRT(){
LL M = a[1], ans = b[1];
REP(i, 2, num){
LL A = M, B = a[i], C = ((b[i] - ans) % B + B) % B;
LL d = exgcd(A, B, x, y);
if(C % d != 0) return -1;
x = Q_mul(x, C / d, B / d);
ans += x * M;
M *= B / d;
ans = (ans % M + M) % M;
}
return (ans % M + M) % M;
}
int main(){
num = RD();
REP(i, 1, num)a[i] = RD(), b[i] = RD();
printf("%lld\n", EXCRT());
return 0;
}
P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT的更多相关文章
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)
题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...
- 扩展中国剩余定理(EXCRT)学习笔记
扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...
- 欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍
1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. int gcd(int x,int y){ ?x:gcd(y,x%y); } int lcm(int x,int y){ return x* ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
- 中国剩余定理(crt)和扩展中国剩余定理(excrt)
数论守门员二号 =.= 中国剩余定理: 1.一次同余方程组: 一次同余方程组是指形如x≡ai(mod mi) (i=1,2,…,k)的同余方程构成的组 中国剩余定理的主要用途是解一次同余方程组,其中m ...
- 【洛谷 P4777】 【模板】扩展中国剩余定理(EXCRT)
注意一下:: 题目是 \[x≡b_i\pmod {a_i}\] 我总是习惯性的把a和b交换位置,调了好久没调出来,\(qwq\). 本题解是按照 \[x≡a_i\pmod {b_i}\] 讲述的,请注 ...
- LUOGU P4777 【模板】扩展中国剩余定理(EXCRT)
传送门 解题思路 扩展 $crt$,就是中国剩余定理在模数不互质的情况下,首先对于方程 $\begin{cases} x\equiv a_1\mod m_1\\x\equiv a_2\m ...
- 【luoguP4777】【模板】扩展中国剩余定理(EXCRT)
(扩展)中国剩余定理 对于一组同余方程 \(x\equiv a_1(mod \quad n_1)\) \(x\equiv a_2(mod \quad n_2)\) \(x\equiv a_3(mod ...
随机推荐
- Final发布中间产物
目录 ❶版本控制 ❷软件功能说明书 ❸WBS ❹PSP 一.版本控制 ①Git地址:https://git.coding.net/tianjiping/Android-tianjiping.git ② ...
- Daily Scrumming 2015.10.20(Day 1)
一.今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 购买服务器,搭建服务器,配置服务器端用户与权限管理 配置ruby与rails环境 配置mysql与数据 ...
- YQCB绩效表
标准 队员 工作质量 20% 工作态度 20% 工作量 30% 工作难易程度 20% 团队意识 10% 总分 陈美琪 17 18 28 19 9 91 张晨阳 16 16 25 17 9 83 刘昭为 ...
- java-switch语句
switch语句是常用的java循环判断语句,但是有的知识点并不一定清楚. 首先是switch语句括号中的判断条件,判断条件只能是整型或者字符和整型或者字符组成的表达式. 再就是case语句,可以称之 ...
- alphe4
队名:massivehard 组员1:(组长:晓辉) 今天完成了哪些任务: 服务器基本架设完毕 明日计划: 服务器与客户端对接 用户手写记录功能的完善 还剩下哪些计划: 用户手写记录功能 服务器与客户 ...
- 404 Note Found团队-项目UML设计
目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...
- 复利计算测试(C语言)
对我们和复利计算程序,写单元测试. 有哪些场景? 期待的返回值 写测试程序. 运行测试. 测试模块 测试输入 预期结果 运行结果 bug跟踪 计算终值 (本金,年限,利率) 终值 1 (100 ...
- .NET4.0 加密通讯协议下TLS 的兼容支持问题.
Study From https://stackoverflow.com/questions/28286086/default-securityprotocol-in-net-4-5 The defa ...
- ES6 常用1
( (1)交换变量的值 ) [x, y] = [y, x]; ( (2)从函数返回多个值 // 返回一个数组function example() { return [1, 2, 3]; } var [ ...
- 2013长沙网赛E题Travel by Bike
题目链接:http://acm.zju.edu.cn/changsha/showProblem.do?problemId=26 题意:一个人从一个地方到另一个地方,长度为L,每小时速度为speed,周 ...