曹冲养猪(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 }

 

posted @ 2020-04-15 03:00  Hyx'  阅读(165)  评论(0编辑  收藏  举报