曹冲养猪(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 }
本文作者:Hyx'
本文链接:https://www.cnblogs.com/hhyx/p/12702754.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步