【luoguP4777】【模板】扩展中国剩余定理(EXCRT)
(扩展)中国剩余定理
对于一组同余方程
\(x\equiv a_1(mod \quad n_1)\)
\(x\equiv a_2(mod \quad n_2)\)
\(x\equiv a_3(mod \ \ n_3)\)
\(x\equiv a_n(mod\ \ n_m)\)
对于第一个和第二个式子
则有:
\(x = a1 + k1*n1\)
\(x = a2 + k2*n2\)
就有:
\(a1 + k1 * n1 = a2 + k2 * n2\)
\(k1 * n1 - k2 * n2 = a2 - a1\)
故我们设 \(d = a_2 - a_1\) 再变化一下形式就有:
\(k_1 * n_1 + (-k_2) * n_2 = d\)
令 \(g = gcd(n_1,n_2)\)
这样我们就可以通过exgcd来求出一组解 x1,y1
满足 \(x_1 * n_1 + y_2 * n_2 = g\)
故: \(x_1∗d/g∗n_1+y_2∗d/g∗n_2=g∗d/g\)
则: \(k1=x1∗d/g,k2=y1∗d/g\)
从而得到一组通解
\(k1=k1+n2/g∗T\)
\(k2=k2−n1/g∗T\)
要使所求得的解最小且为正整数则可以根据 k1 的通解形式求得
\(k_1 = ( k_1 % ( n_2/g ) + n_2/g ) % ( n_2/g )\)
再带入 $x=a_1+k_1∗n_1 $得到 xx
令 A 为合并后的 a , N 为合并后的 n
**所以\(N=lcm(n_1,n_2)=n_1∗n_2/g\)
\(x==k_1*p_1+a_1 (mod \ \ lcm(n_1,n_2));\)
void exgcd(ll a,ll b,ll &g,ll &x,ll &y)
{
if (b == 0)
{
g = a;x = 1; y = 0;
return;
}
exgcd(b,a%b,g,y,x);
y-=(a/b)*x;
}
bool flag = false;
ll a1,a2,n1,n2;
ll abs(ll x) {return x>0?x:-x;}
void china()
{
ll d = a2 - a1;
ll g,x,y;
exgcd(n1,n2,g,x,y);
if (d % g == 0)
{
x = ((x*d/g)%(n2/g)+(n2/g))%(n2/g);
a1 = x*n1 + a1;
n1 = (n1*n2)/g;
}
else flag = true;
}
int n;
long long as[100001];
long long ps[100001];
ll exchina()
{
a1 = as[0];
n1 =ps[0];
for (ll i = 1;i<n;i++)
{
a2 = as[i];
n2 = ps[i];
china();
if (flag)
return -1;
}
return a1;
}
int main()
{
cin>>n;
flag = false;
for (ll i = 0;i<n;i++)
cin>>ps[i]>>as[i];
cout<<(long long)realchina()<<endl;
}
【luoguP4777】【模板】扩展中国剩余定理(EXCRT)的更多相关文章
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...
- 扩展中国剩余定理 (ExCRT)
扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...
- 扩展中国剩余定理(EXCRT)快速入门
问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...
- 扩展中国剩余定理 exCRT 学习笔记
前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
- [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)
题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
- 扩展中国剩余定理(EXCRT)学习笔记
扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...
随机推荐
- errgroup 分析
errgroup 在 WaitGroup 的基础上实现子协程错误传递, 同时使用 context 控制协程的生命周期. 使用 errgroup 的使用非常简单 package main import ...
- Luogu5285 [十二省联考2019] 骗分过样例
题目分析: 观察前3个点,$361=19*19$,所以可以发现实际上就是快速幂,然后模数猜测是$998244353$,因为功能编号里面有这个数字,用费马小定理处理一下. $pts:12$ 观察第4个点 ...
- 淘宝API总结
1. 淘宝客API https://open.alimama.com/?spm=a219t.11816995.1998910419.d8546b700.2a8f75a5C0NajI#!/documen ...
- 扩展支持全选的CheckBox列。
扩展支持全选的CheckBox列. https://www.codeproject.com/articles/42437/toggling-the-states-of-all-checkboxes-i ...
- element-ui里的form校验,一直有点疑惑,prop是怎么对应的?
图一 图一中红框内的这种校验,必须在 这个product_form数据域内定义对应的变量名(cid.itemName......),不然对应不上. 图一红框外的那种校验,则不用在数据域内定义对应的变量 ...
- 详解Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
在Spring Cloud中我们用Hystrix来实现断路器,Zuul中默认是用信号量(Hystrix默认是线程)来进行隔离的,我们可以通过配置使用线程方式隔离. 在使用线程隔离的时候,有个问题是必须 ...
- 远程 Linux(Ubuntu 18)添加字体
安装 xshell与xftp 连接xshell 点击 xshell上方工具栏中的xftp图标, 自动连接xftp linux下创建字体目录 su cd / cd usr/share/fonts mkd ...
- Vue的学习笔记
以下文章皆为观看慕课网https://www.imooc.com/learn/796中“河畔一角”老师的讲解做的笔记,仅供参考. 一.Vue特点 Vue是MVVM的框架,也就是模型视图->视图模 ...
- Android笔记(十三) Android中的基本组件——文本
Android中常用的文本组件有 普通文本框(TextView)和编辑框(EditText)两种 EditText是TextView的子类,作用就是在界面上显示文本,区别是EditText允许用户编辑 ...
- Python函数Day4
一.内容补充 __iter__() 就是 iter(),iter() 调用的就是__iter__() __next__() 就是 next(),next()调用的就是__next__() __clos ...