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

 

posted @ 2018-11-05 20:44  WJEMail  阅读(367)  评论(0编辑  收藏  举报