首页 > 其他分享 >exCRT

exCRT

时间:2023-01-12 10:37:05浏览次数:38  
标签:int ll exCRT pmod llb lla equiv

\[\begin{aligned} &\begin{cases} x\equiv a_1\pmod{m_1}\\x\equiv a_2\pmod{m_2} \end{cases}\\ &x=pm_1+a_1=qm_2+a_2\\ &pm_1-qm_2=a_2-a_1 \end{aligned} \]

将其视为一个不定方程,用 exgcd 解出 \(p,q\) 的值。然后得出 \(x\) 的一个解。可得:

\[x\equiv pm_1+a_1\pmod{\text{lcm}(m_1,m_2)} \]

所以可以将两个方程合并为一个。

#include<cstdio>
#include<algorithm>
using namespace std;
typedef __int128 ll;
ll exgcd(ll a,ll b,ll&x,ll&y){
	if(!b){x=1;y=0;return a;}
	ll d=exgcd(b,a%b,y,x);
	y-=(a/b)*x;return d;
}
int main(){
	int n;long long lla,llb;
	scanf("%d%lld%lld",&n,&llb,&lla);
	ll a1=lla,m1=llb,a2,m2,q1,q2,d;
	for(int i=1;i<n;i++){
		scanf("%lld%lld",&llb,&lla);
		a2=lla;m2=llb;d=exgcd(m1,m2,q1,q2);
		m2=m1*m2/d;a2=((q1*(a2-a1)/d*m1+a1)%m2+m2)%m2;a1=a2;m1=m2;
	}
	long long ans=a1;printf("%lld\n",ans);
	return 0;
}

标签:int,ll,exCRT,pmod,llb,lla,equiv
From: https://www.cnblogs.com/hihihi198/p/17045731.html

相关文章

  • CRT与EXCRT
    中国剩余定理-模数之间两两互质点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;//中国剩余定理CRTinta[200000];intr[200000];......
  • excrt
    求解同余方程组最小整数解:\[\left\{\begin{matrix}x\equiva_1\pmod{m_1}\\x\equiva_2\pmod{m_2}\\\cdots\\x\equiva_n\pmod{m_n}\end{matrix}\right.\]设......
  • 拓展中国剩余定理 exCRT
    求解如下形式的一元线性同余方程组(其中\(n_1,n_2,···,n_k\)不两两互质)\[\left\{ \begin{matrix}x&\equiv&a_1&(mod\n_1)\\ x&\equiv&a_2&(mod......