一道中国剩余定理的例题

给你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;
    }
}
时间: 2024-08-30 00:09:26

一道中国剩余定理的例题的相关文章

中国剩余定理最终例题

[中国剩余定理最终例题]

HDU1788 Chinese remainder theorem again【中国剩余定理】

题目链接: pid=1788">http://acm.hdu.edu.cn/showproblem.php?pid=1788 题目大意: 题眼下边的描写叙述是多余的... 一个正整N除以M1余M1-a,除以M2余M2-a.除以M3余M3-a. 即除以Mi余Mi-a(a < Mi < 100),求满足条件的最小的数. 思路: 这是一道中国剩余定理的基础题.由题目得出N % Mi + a = Mi,即得:N + a = 0(mod Mi).也 就是全部的Mi都能整除N+a. 那么题

poj1006 中国剩余定理&amp;&amp;中国剩余定理解析

poj 1006 题的思路不是很难的,可以转化数学式: 现设 num 是下一个相同日子距离开始的天数 p,e,i,d 如题中所设! 那么就可以得到三个式子:( num + d ) % 23 == p: ( num + d ) % 28 == e: ( num + d ) % 33 == i: p,e,i,d 是我们输入的,那么我们需要求出num即可,为了方便,我们将num+d暂时作为一个整体!令x = num + d: 即:x % 23 == p: x % 28 == e: x % 33 ==

拓展中国剩余定理解决模数不互质同余方程组

如果模数互质的话,直接中国剩余定理就可以了 但是如果模数不互质又没有接触这个方法就凉凉了 推是很不好推出来的 假设我们这里有两个方程: x=a1?x1+b1 x=a2?x2+b2 a1,a2是模数,b1,b2是余数 那么我们可以合并这两个方程: a1?x1+b1=a2?x2+b2 由于x1和x2可以取负无穷到正无穷,所以符号不能约束它们,我们随便变一变形得到 a1?x1+a2?x2=b2?b1 然后使用拓展欧几里德算法,x和y分别是式子中的x1和x2 我们求出了一个最小正整数解x1 令k=(a1

学习拓展中国剩余定理小结

前言 话说中国剩余定理好早就会了,但是一直木有接触过拓展的. 只知道它是个什么东东. 最近似乎需要它了,稍微学了学,似乎还挺简单的. 小结一下~ 简介 中国剩余定理我们都懂吧? 而拓展则是把它后面的模数变成一个非质数,(当然,各个方程的模数互质). 然后求出最小的x的解. 做法 似乎拓展之后很难用原来的套路来搞了. 怎么办? 我们发现,我们可以利用一些奇怪的推柿子大法来合并柿子. 考虑合并一下两个柿子: \(x \equiv c1 (mod\ m1)\) \(x \equiv c2 (mod\

中国剩余定理 互质与非互质版本

中国剩余定理互质版 设m1,m2,m3,...,mk是两两互素的正整数,即gcd(mi,mj)=1,i!=j,i,j=1,2,3,...,k. 则同余方程组: x = a1 (mod n1) x = a2 (mod n2) ... x = ak (mod nk) 模[n1,n2,...nk]有唯一解,即在[n1,n2,...,nk]的意义下,存在唯一的x,满足: x = ai mod [n1,n2,...,nk], i=1,2,3,...,k. 解可以写为这种形式: x = sigma(ai* 

中国剩余定理学习笔记

先看一道poj上的题目:[poj1006] Biorhythms 题意: 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期.然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现. 分析: 首先我们要知道,任意两个峰值之间一定相距整数倍的周期.假设一年的第N天达到峰值,则下次达到峰值

数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)

数学渣渣愉快的玩了一把数论,来总结一下几种常用的算法入门,不过鶸也是刚刚入门, 所以也只是粗略的记录下原理,贴下模板,以及入门题目(感受下模板怎么用的) (PS:文中蓝色字体都可以点进去查看百度原文) 附赠数论入门训练专题:点我打开专题(题目顺序基本正常,用以配套数论入门) 一.同余定理 简单粗暴的说就是:若 a-b == m 那么 a%m == b%m 这个模运算性质一眼看出...直接上入门水题: Reduced ID Numbers 附AC代码(这个也没啥模板....知道就好) #inclu

中国剩余定理详解

中国剩余定理 孙子算经里有这样一个问题:"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?" 翻译成现在的数学问题就是 x%3 == 2,x%5 == 3,x%7 ==  2,求x 的值: 遇到这这样一个问题很多C语言初学者不禁会想到用暴力可以算出来,还要这样一个定理干嘛? 如果数据相当大呢?计算机就会计算相当困难.然而这个问题早早的就被孙子解决了. 求出3,5,7 两两中的最小公倍数lcm,k*lcm与另一个数mod等于1(找出一个符合条件的k): 用k*lcm*