再次进行中国余数定理

问题描述

我知道部分同学最近在看中国剩余定理,就这个定理本身,还是比较简单的:

假设m1,m2,…,mk两两互素,则下面同余方程组:

x≡a1(mod m1)

x≡ a2(mod m2)



x≡ak(mod mk)

在0 <= <m1m2 … mk内有唯一解。

记Mi = M / mi(1 <= i <= k),因为(Mi,mi)= 1 ,故有二个整数pi,qi满足Mipi + miqi = 1,如果记ei = Mi / pi,那么

会有:ei≡0(mod mj),j!=

iei≡1(mod mj),j = i

很容易理解,e1a1 + e2a2 + … + ekak就是方程组的一个解,这个解加减M的积分倍后就可以得到最小的非负积分解。

这就是中国剩余定理及其取代过程。

现在有一个问题是这样的:

一个正整数N除以M1余(M1-a),除以M2余(M2-a),除以M3余(M3-a),总之,除以MI余(MI-a),其中(a <Mi <100 i = 1,2,…I),求满足条件的最小的数。

输入项

输入数据包含多组测试实例,每个实例的第一行是两个整数I(1 <I <10)和a,其中,I表示M的个数,a的表示替代,紧接着的一行是I个整数M1,M1 … MI,I = 0并且a = 0结束输入,不处理。

输出量

对于每个测试实例,请在一行内部输出满足条件的最小的数。每个实例的输出占一行。

样本输入

2 1

2 3

0 0

样本输出

5

不能满足沪指的方程组,ExCrt完事

#include<iostream>
using namespace std;
#define LL long long
LL mi[1100],ai[1100];//mi为要模的数,ai为余数。
LL gcd(LL a, LL b)
{
return b == 0 ? a : gcd(b, a%b);
}
void exgcd(LL a, LL b, LL &d, LL &x, LL &y)
{
if(!b)
{
d = a, x = 1, y = 0;
}
else
{
exgcd(b, a%b, d, y, x);
y -= x * (a / b);
}
}
LL CRT(LL l, LL r, LL *mi, LL *ai)
{
LL lcm = 1;
for(LL i = l; i <= r; i++)
lcm = lcm / gcd(lcm, mi[i]) * mi[i];
for(LL i = l+1; i <= r; i++)
{
LL A = mi[l], B = mi[i], d, x, y, c = ai[i] - ai[l];
exgcd(A, B, d, x, y);
if(c % d)
return -1;
LL mod = mi[i] / d;
LL k = ((x * c / d) % mod + mod) % mod;
ai[l] = mi[l] * k + ai[l];
mi[l] = mi[l] * mi[i] / d;
}
/*if(ai[l] == 0)
return lcm;*/ //保证结果为正整数
return ai[l];
}
int main()
{
LL t,n,i,aa;
while(cin>>n>>aa)
{
if(n==0) break;
for(i=1; i<=n; i++){
cin>>mi[i];
ai[i]=mi[i]-aa;
}
cout<<CRT(1ll,n,mi,ai)<<endl;
}
return 0;
}

数学--数论--中国剩余定理 拓展 HDU 1788的更多相关文章

  1. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)

    礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ...

  2. POJ 1006 Biorhythms (数论-中国剩余定理)

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 111285   Accepted: 34638 Des ...

  3. 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理

    [bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...

  4. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)

    数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...

  5. 51Nod1123 X^A Mod B 数论 中国剩余定理 原根 BSGS

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1123.html 题目传送门 - 51Nod1123 题意 $T$ 组数据. 给定 $A,B,C$,求 ...

  6. BZOJ2219 数论之神 数论 中国剩余定理 原根 BSGS

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2219.html 题目传送门 - BZOJ2219 题意 求同余方程 $x^A\equiv B \pmo ...

  7. hdu 1573 x问题(中国剩余定理)HDU 2007-1 Programming Contest

    只是套模板而已(模板其实也不懂). 留着以后好好学的时候再改吧. 题意—— X = a[i] MOD b[i]; 已知a[i],b[i],求在[1, n]中存在多少x满足条件. 输入—— 第一行一个整 ...

  8. 模板—中国剩余定理+拓展GCD

    int exgcd(int a,int b,int &x,int &y) { ) { x=,y=; return a; } int gcd=exgcd(b,a%b,x,y); int ...

  9. 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai  的数 ...

随机推荐

  1. node+express+mysql实现简单的数据增删改查

    前提 电脑已经安装了node,express,mysql. 实现步骤 1.新建数据库表 附数据表结构: 2.创建exprss项目 express -e myapp  新建一个以ejs为模板的expre ...

  2. python 网络编程---粘包

    一.什么是粘包?(只有在TCP中有粘包现象,在UDP中永远不会粘包) 黏包不一定会发生. 如果发生 了:1.可能是在客户端已经粘了 2.客户端没有粘,可能是在服务端粘了. 所谓的粘包问题:主要是是因为 ...

  3. Linux网络安全篇,配置Yum源(二),阿里Yum源

    官网教程: https://opsx.alibaba.com/mirror 1.下载配置文件到 /etc/yum.repos.d 目录 wget -O /etc/yum.repos.d/CentOS- ...

  4. javascript入门 之 zTree(十二 托拽事件(二))

    1.逻辑可能有不完善的地方,如果发现,请指出. <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - d ...

  5. 9.1 ArrayList(集合)的使用,与array(数组)的对比

    1.array 和ArrayList的区别? array 数组的长度是固定的,适应不了变化的需求. ArrayList集合的长度可变.大小可变. 2.为什么要用集合,它优点是什么? java是面向对象 ...

  6. mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的

    mysql命令行参数  --- 这些参数不同于  mysqldump  后的 那些参数   :2种类型的参数 含义是不一样的 一,mysql命令行参数 Usage: mysql [OPTIONS] [ ...

  7. stand up meeting 12/2/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云  将logic部分提供的delete接口接入,与logic,数据库部分沟通实现了add/delete按钮的复用:解决UI部 ...

  8. Equalizing by Division

    The only difference between easy and hard versions is the number of elements in the array. You are g ...

  9. vue2.x学习笔记(十四)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12602256.html. 组件的Prop Prop是组件之间通信的一个重要途径,了解其知识十分重要. Prop的大 ...

  10. linux之cat 操作

    1.查看或创建 cat 1.txt #如果目录有这个文件则会打开查看,没有则会创建 2.压缩空白 cat 1.txt 我是第一行 我是第二 行 cat -bs 1.txt # 变成 cat 1.txt ...