首页 > 其他 > 详细

一道中国剩余定理的例题

时间:2017-08-22 13:37:17      阅读:277      评论:0      收藏:0      [点我收藏+]

给你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;
    }
}

 

一道中国剩余定理的例题

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!