首页 > 其他分享 >扩展中国剩余定理

扩展中国剩余定理

时间:2023-01-14 22:13:18浏览次数:52  
标签:剩余 __ frac gcd 定理 扩展 times int128 mod

学习扩展中国剩余定理前需要学习扩欧求逆元
\(\left\{\begin{matrix} x\equiv c_{1}(\mod m_{1}) \\ x\equiv c_{2}(\mod m_{2}) \end{matrix}\right.\)
\(x=c_{1}+m_{1}\times k_{1}=c_{2}+m_{2}\times k_{2}\)
\(m_{1}\times k_{1}=c_{2}-c_{1}+m_{2}\times k_{2}\)
$\frac{m_{1}\times k_{1}}{gcd(m_{1},m_{2})}=\frac{c_{2}-c_{1}}{gcd(m_{1},m_{2})}+\frac{m_{2}\times k_{2}}{gcd(m_{1},m_{2})} $
\(\frac{m_{1}\times k_{1}}{gcd(m_{1},m_{2})}\equiv \frac{c_{2}-c_{1}}{gcd(m_{1},m_{2})}(\mod \frac{m_{2}}{gcd(m_{1},m_{2})} )\)
\(k_{1}\equiv inv(\frac{m_{1}}{\gcd(m_{1},m_{2})},\frac{m_{2}}{\gcd(m_{1},m_{2})} )\times \frac{c_{2}-c_{1}}{\gcd(m_{1},m_{2})}(\mod \frac{m_{2}}{\gcd(m_{1},m_{2})} )\)
$k_{1}= inv(\frac{m_{1}}{\gcd(m_{1},m_{2})},\frac{m_{2}}{\gcd(m_{1},m_{2})} )\times \frac{c_{2}-c_{1}}{\gcd(m_{1},m_{2})}+y\times \frac{m_{2}}{\gcd(m_{1},m_{2})} $
$x=c_{1}+inv(\frac{m_{1}}{\gcd(m_{1},m_{2})},\frac{m_{2}}{\gcd(m_{1},m_{2})} )\times \frac{c_{2}-c_{1}}{\gcd(m_{1},m_{2})}\times m_{1}+y\times \frac{m_{2}\times m_{1}}{\gcd(m_{1},m_{2})} $
\(x\equiv c_{1}+inv(\frac{m_{1}}{\gcd(m_{1},m_{2})},\frac{m_{2}}{\gcd(m_{1},m_{2})} )\times \frac{c_{2}-c_{1}}{\gcd(m_{1},m_{2})}\times m_{1}(\mod \frac{m_{2}\times m_{1}}{\gcd(m_{1},m_{2})})\)
\(c^{'}=c_{1}+inv(\frac{m_{1}}{\gcd(m_{1},m_{2})},\frac{m_{2}}{\gcd(m_{1},m_{2})} )\times \frac{c_{2}-c_{1}}{\gcd(m_{1},m_{2})}\times m_{1}\)
\(m^{'}=\frac{m_{2}\times m_{1}}{\gcd(m_{1},m_{2})}\)
这样就将两个条件合并为一个条件,最后就能将所有条件合成一个条件。
代码:

#include<iostream>
#include<cstdio>
#include<cmath> 
using namespace std;
int n;
__int128 a[100010],b[100010];
__int128 w,z;
__int128 gcd(__int128 x,__int128 y){
	if(y==0){
		w=1;
		z=0;
		return x;
	}
	__int128 ans=gcd(y,x%y);
	__int128 k=w;
	w=z;
	z=k-x/y*z;
	return ans;
}
__int128 ksm(__int128 x,__int128 y,__int128 mod){
	if(y==0){
		return 1;
	}
	__int128 ans=ksm(x,y/2,mod);
	ans=ans*ans%mod;
	if(y%2==1){
		ans=ans*x%mod;
	}
	return ans;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		long long x,y;
		cin>>x>>y;
		a[i]=x;
		b[i]=y;
	}
	for(int i=1;i<n;i++){
		__int128 g=gcd(a[i],a[i+1]);
		gcd(a[i]/g,a[i+1]/g);
		b[i+1]=(w*(b[i+1]-b[i])/g%(a[i+1]/g)+(a[i+1]/g))%(a[i+1]/g)*a[i]+b[i];
		a[i+1]=a[i]*a[i+1]/g;
		b[i+1]=b[i+1]%a[i+1];
	}
	long long ans=b[n];
	cout<<ans;
	return 0;
}

标签:剩余,__,frac,gcd,定理,扩展,times,int128,mod
From: https://www.cnblogs.com/z-2-we/p/17052451.html

相关文章

  • Codeforces 1630 E Making It Bipartite 题解 (Dilworth定理)
    题目链接首先可以想到把题目中的那张图G建出来,由于要求这张图是二分图,把它复制一遍(\(G\toG'\)),然后对于每个u,连一条无向边\(u-u'\),这样就变成了最大独立集问题。但是一......
  • XML及JSON扩展方法,方便快速解析
    #regionXML扩展方法///<summary>///从xml节点中获取指定属性的数据,如果不存在该属性则返回默认值///</summary>///<typeparamname="T">xml数据的数据类型</type......
  • 6-STA扩展
    1.Tool是怎么计算Celldealy&Netdelay的?Celldelay:根据cell的输入transition和输出load通过查表从library中得到celldelay和输出transition,在library的......
  • Codeforces 1630 E Making It Bipartite 题解 (Dilworth定理)
    题目链接首先可以想到把题目中的那张图G建出来,由于要求这张图是二分图,把它复制一遍(\(G\toG'\)),然后对于每个u,连一条无向边\(u-u'\),这样就变成了最大独立集问题。但是一......
  • 环论中中国剩余定理证明笔记
    这一阵在看Maki的《抽象代数I》视频课(https://www.bilibili.com/video/BV1xG411j7Hk),其中第20课讲到环论的中国剩余定理,即:若(R,+,·)是交换环,Ii ◁R,i=1,...,......
  • Angular集成bpmn.js的基础实现及扩展(一)
    一、bpmn的基本认识bpmn.js是一个BPMN2.0渲染工具包和web建模器,使得画流程图的功能在前端来完成。bpmn画图具有哪些内容?二、使用npm安装bpmn.jsnpminstall--sav......
  • [概率论与数理统计]笔记:3.5 大数定律与中心极限定理
    3.5大数定律与中心极限定理切比雪夫不等式定义\(EX\)和\(DX\)存在,对于任意的\(\epsilon>0\),有\[P\{|X-EX|\ge\epsilon\}\le\frac{DX}{\epsilon^2}\]证明这里证明\(......
  • P4980 【模板】Pólya 定理
    作为板子题,先上公式:\[|X/G|=\frac1{|G|}\sum_{g\inG}|B|^{c(g)}\]显然,\(|G|=n\)用\(g_i\)表示旋转\(i\)个的置换,则\(c(g_i)=(n,i)\)我们要算下式:\[\begin{ali......
  • JRTPLIB RTP头和扩展头代码解析
    RTP文档规范文档查阅网址​​​https://www.rfc-editor.org/rfc/rfc3550​​​​​​​https://www.rfc-editor.org/rfc/rfc5285​​对比说明   在RFC3550头扩展包含......
  • HEVC扩展备用安装方法
    这个玩意微软商店免费但是下架了,购买需要RMB安装转到https://store.rg-adguard.net/在左侧的下拉菜单选择“ProductId”把链接中“ProductID=”后面的部分......