EXCRT
是个好东西,可以处理在模数不互质的同余方程组
核心就是用扩欧来合并方程
如果我们有两个形如\(x\equiv b_1(mod\ a_1)\) \(x\equiv b_2(mod\ a_2)\)的方程我们要将他们合并
就是利用各种操作化柿子
\]
随便移一下
\]
根据贝祖定理\((a1,a2)|(b_2-b_1)\)时候才有解
如果有解得话,我们只需要在两边除以\((a1,a2)\)
那么就有
\]
我们也可以写成同余的形式
\]
让左边只留下\(k_1\),就是把逆元乘过去
\]
再将同余式写成等式
\]
再回带到\(x\)里去
\]
现在我们再写成同余式
\]
现在两个方程不就被合并好了吗
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 100005
#define LL long long
LL x,y;
LL gcd(LL a,LL b)
{
if(!b) return a;
return gcd(b,a%b);
}
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if(!b) return x=1,y=0,a;
LL r=exgcd(b,a%b,y,x);
y-=a/b*x;
return r;
}
int n;
LL a[maxn],b[maxn];
inline LL read()
{
char c=getchar();
LL x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
inline LL inv(LL a,LL b)
{
LL r=exgcd(a,b,x,y);
LL t=b/r;
return (x%t+t)%t;
}
inline LL mul(LL a,LL b)
{
LL S=0;
while(b)
{
if(b&1ll) S=S+a;
b>>=1ll;
a=a+a;
}
return S;
}
void write(LL x)
{
if(x>9) write(x/10);
putchar(x%10+48);
}
int main()
{
n=read();
for(re int i=1;i<=n;i++)
a[i]=read(),b[i]=read();
LL r=gcd(a[1],a[2]);
LL A=mul(a[1],a[2]/r);
LL B=(inv(a[1]/r,a[2]/r)*(b[2]-b[1])/r%(a[2]/r)+a[2]/r)%(a[2]/r)*a[1]+b[1];
for(re int i=3;i<=n;i++)
{
LL r=gcd(A,a[i]);
B=(inv(A/r,a[i]/r)*(b[i]-B)/r%(a[i]/r)+a[i]/r)%(a[i]/r)*A+B;
A=mul(A,a[i]/r);
}
write(B);
return 0;
}
EXCRT的更多相关文章
- X问题 HDU - 1573(excrt入门题)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- CRT和EXCRT学习笔记
蒟蒻maomao终于学会\(CRT\)啦!发一篇博客纪念一下(还有防止忘掉) \(CRT\)要解决的是这样一个问题: \[x≡a_1(mod m_1)\] \[x≡a_2(mod m_2)\] ...
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- 「NOI2018」屠龙勇士(EXCRT)
「NOI2018」屠龙勇士(EXCRT) 终于把传说中 \(NOI2018D2\) 的签到题写掉了... 开始我还没读懂题目...而且这题细节巨麻烦...(可能对我而言) 首先我们要转换一下,每次的 ...
- Luogu4774 NOI2018 屠龙勇士 ExCRT
传送门 原来NOI也会出裸题啊-- 用multiset求出对付每一个BOSS使用的武器威力\(ATK_i\),可以得到\(m\)个式子\(ATK_ix \equiv a_i \mod p_i\) 看起 ...
- CRT&EXCRT 中国剩余定理及其扩展
前言: 中国剩余定理又名孙子定理.因孙子二字歧义,常以段子形式广泛流传. 中国剩余定理并不是很好理解,我也理解了很多次. CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法. 求满足n个条 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
- BZOJ5418 NOI2018屠龙勇士(excrt)
显然multiset求出每次用哪把剑.注意到除了p=1的情况,其他数据都保证了ai<pi,于是先特判一下p=1.比较坑的是还可能存在ai=pi,稍微考虑一下. 剩下的部分即解bix≡ai(mod ...
- CRT && exCRT模板
CRT从各种方面上都吊打exCRT啊...... 短,好理解... 考虑构造bi使得bi % pi = ai,bi % pj = 0.然后全加起来就行了. 显然bi的构造就是ai * (P/pi) * ...
随机推荐
- Java中多线程并发体系知识点汇总
一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...
- Android应用程序组件之间的通信Intent和IntentFilter
Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 ...
- Wireshark使用技巧
Wireshark使用技巧 在分析网络时,包应该尽量的小,只要能定位问题即可. 1. 只抓包头,在wireshark中可以设置抓包大小. 如果使用tcpdump命令: [root@server_1 / ...
- MVC中提交表单的4种方式
一,MVC HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...
- 51nod 1245 Binomial Coefficients Revenge
Description C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0), C(M,1)......C(M,M)这M + 1个数中,有多少数不是p的倍 ...
- CTSC/APIO2018 游记
狗牌滚粗选手,此博客证明我去过...... CTSC 消失的源代码与消失的分数...... 我也不知道发生了什么....... APIO 旁边两位小哥太强了,心态完全炸裂,最后也滚粗了...... 回 ...
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />详解
X-UA-Compatible是针对IE8新加的一个设置,对于IE8之外的浏览器是不识别的,这个区别与content="IE=7"在无论页面是否包含<!DOCTYPE> ...
- 2017年10月21日 数据库基础&三大范式
1. 数据库里面常用 int 整型nvarchar 字符串float 小数型decimal(,) 小数型money 小数型datetime 时间类型 ima ...
- 机器学习kNN
from numpy import * import operator def createDataSet(): group = array([[1.0, 1.1], [1.0, 1.0], [0, ...
- Java ScheduledExecutorService源码分析
Java 定时任务可以用Timer + TimerTask来做,或者使用ScheduledExecutorService,使用ScheduledExecutorService有两个好处: 1. 如果任 ...