1. 程式人生 > >【入門OJ4815】Xiao 9*大戰朱最學

【入門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; }