【模板】中国剩余定理(CRT)

tech2024-04-18  91

前往:我自己搭建的博客

题目

洛谷P1495中国剩余定理(CRT)

题解

CRT要求所有模数两两互质。

代码

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=12; int n; ll M=1,x,y,ans; ll a[maxn],m[maxn]; void exgcd(ll a,ll b) { if(!b) {x=1,y=0; return;} exgcd(b,a%b); ll z=x; x=y; y=z-(a/b)*y; } inline ll inv(ll a,ll b) {exgcd(a,b); return (x%b+b)%b;} //求逆元 inline ll CRT() { for(int i=1;i<=n;i++) M*=m[i]; for(int i=1;i<=n;i++) { ll Mi=M/m[i],ti=inv(Mi,m[i]); ans=(ans+a[i]*Mi*ti%M)%M; } return ans; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld%lld",&m[i],&a[i]); printf("%lld\n",CRT()); return 0; }
最新回复(0)