曹冲养猪(CRT
# 题意
大小为n的 a和m,m表示猪圈的个数,a表示将猪分到猪圈后剩下的,问最后满足这n个条件的猪的个数的最小值
其中a两两互质
# 题解
CRT求得即可,最后模一下M即可将答案变到[0,M-1]即最小的解
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N=2e6; 5 ll a[N],m[N]; 6 int n; 7 ll exgcd(ll a,ll b,ll &x,ll &y){ 8 if(!b){ 9 x = 1; y = 0; 10 return a; 11 } 12 ll d=exgcd(b,a%b,y,x); 13 y-=(a/b)*x; 14 return d; 15 } 16 ll CRT(){ 17 ll M=1; 18 for(int i=1;i<=n;i++){ 19 M*=m[i]; 20 } 21 ll res=0; 22 for(int i=1;i<=n;i++){ 23 ll x,y; 24 ll tmp=M/m[i]; 25 exgcd(tmp,m[i],x,y); 26 res=(res+tmp*x*a[i])%M; 27 } 28 return ((res+M)%M)%M; 29 } 30 int main(){ 31 cin>>n; 32 for(int i=1;i<=n;i++) 33 cin>>m[i]>>a[i]; 34 cout<<CRT()<<endl; 35 36 }