luoguP3868 [TJOI2009]猜数字

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128 i1;
ll k,a[15],b[15];
i1 ans=1,sko,xx,yy;
inline void ex_gcd(i1 x,i1 y)
{
    if(!y){xx=1,yy=0;return;}
    ex_gcd(y,x%y);
    i1 zz=xx;
    xx=yy;
    yy=zz-x/y*yy;
}
int main()
{
    scanf("%lld",&k);
    for(int i=1;i<=k;i++)scanf("%lld",&a[i]);
    for(int i=1;i<=k;i++)scanf("%lld",&b[i]),ans*=b[i];
    for(int i=1;i<=k;i++)
    {
        i1 usu=ans/b[i];
        ex_gcd(usu,b[i]);
        (sko+=(a[i]*usu*((xx+b[i])%b[i]))%ans)%=ans;
    }
    cout<<(ll)sko<<endl;
}
posted @ 2019-02-12 09:55  アインツベルン  阅读(81)  评论(0编辑  收藏  举报
Live2D