1 条题解

  • 1
    @ 2017-09-09 17:16:29

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<string>
    #include<cmath>
    #include<queue>
    #include<deque>
    using namespace std;
    typedef long long ll;
    const int maxn=3;
    ll s=1,Mi,ans,m[maxn],a[maxn];
    inline ll read() {
    char c=getchar();
    ll x=0,f=1;
    while(c<'0'||c>'9') {
    if(c=='-')
    f=-1;
    c=getchar();
    }
    while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
    return x*f;
    }
    inline void exgcd(ll a,ll b,ll &x,ll &y) {
    if(b==0) {
    x=1,y=0;
    return;
    } else {
    exgcd(b,a%b,y,x);
    y-=(a/b)*x;
    }
    }
    inline ll qmod(ll a,ll b,ll modd) {
    ll cnt=0;
    while(b) {
    if(b&1) cnt=(cnt+a)%modd;
    a=a*2%modd;
    b>>=1;
    }
    return cnt;
    }
    int main() {
    //freopen("crt.in","r",stdin);
    //freopen("crt.out","w",stdout);
    for(int i=1; i<=2; i++)
    m[i]=read(),a[i]=read(),s*=m[i];
    for(int i=1; i<=2; i++) {
    ll x,y;
    Mi=s/m[i];
    exgcd(Mi,m[i],x,y);
    x=(x%m[i]+m[i])%m[i];
    ll mul=Mi*x;
    ans=(ans%s+qmod(mul,a[i],s))%s;
    }
    if(ans<0) ans+=s;
    cout<<ans<<endl;
    return 0;
    }

  • 1

信息

难度
9
分类
(无)
标签
递交数
6
已通过
3
通过率
50%
上传者