【入门OJ4815】Xiao 9*大战朱最学
题面
自从朱最学~搞定了QQ农场以后,就开始捉摸去QQ牧场干些事业,不仅自己牧场养牛,还到Xiao 9*农场放牛- -!Xiao 9*很生气,有一次朱最学想知道Xiao 9*牧场奶牛的数量,于是Xiao 9*想狠狠耍朱最学一把。举个例子,假如有16头奶牛,如果建了3个牛棚,剩下1头牛就没有地方安家了。如果建造了5个牛棚,但是仍然有1头牛没有地方去,然后如果建造了7个牛棚,还有2头没有地方去。你作为Xiao 9*的私人秘书理所当然要将准确的奶牛数报给Xiao 9*,你该怎么办?
分析
中国剩余定理模板
代码
#include<bits/stdc++.h> using namespace std; #define N 20 #define ll long long ll n,x,y,ans; ll a[N],m[N]; inline ll exgcd(ll a,ll b,ll &x,ll &y) { if(b==0) { x=1,y=0; return a; } ll ret=exgcd(b,a%b,x,y); ll t=x;x=y,y=t-(a/b)*y; return ret; } inline ll CRT(ll a[],ll m[],ll n) { ll ans=0,M=1; for(ll i=1;i<=n;i++)M*=m[i]; for(ll i=1;i<=n;i++) { ll Mi=M/m[i]; exgcd(Mi,m[i],x,y); ans=(ans+x*a[i]*Mi)%M; } if(ans<0)ans+=M; return ans; } int main() { scanf("%lld",&n); for(ll i=1;i<=n;i++)scanf("%lld%lld",&m[i],&a[i]); ans=CRT(a,m,n); printf("%lld\n",ans); return 0; }
“Make my parents proud,and impress the girl I like.”