码迷,mamicode.com
首页 > 其他好文 > 详细

一道中国剩余定理的例题

时间:2017-08-22 13:57:11      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:pac   gcd   space   tin   clu   code   return   lld   turn   

给你n对数,输入x,y就是%x意义下余y

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
typedef long long ll;
using namespace std;
ll ex_gcd(ll a,ll b,ll &x,ll &y)
{
    if (!b)
    {
        x=1,y=0;
        return a;
    }
    ll fzy=ex_gcd(b,a%b,x,y);
    ll t=x;
    x=y;y=t-a/b*y;
    return fzy;
}
int main()
{
    int t;
    ll z1,z2,z3,z4;
    while (cin>>t)
    {
        bool flag=0;
        scanf("%lld%lld",&z1,&z2);
        for (int i=1;i<t;i++)
        {
            scanf("%lld%lld",&z3,&z4);
            if (flag) continue;
            ll a=z1,b=z3,c=z4-z2;
            ll x,y;
            ll d=ex_gcd(a,b,x,y);
            if (c%d!=0)
            {
                flag=1;
                continue;
            }
            ll t=b/d;
            x=(x*(c/d)%t+t)%t;
            z2=z1*x+z2;
            z1=z1*(z3/d);
        }
        if (flag==1) cout<<-1<<endl;
        else cout<<z2<<endl;
    }
}

 

一道中国剩余定理的例题

标签:pac   gcd   space   tin   clu   code   return   lld   turn   

原文地址:http://www.cnblogs.com/fengzhiyuan/p/7411141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!