Han Xin and His Troops(扩展中国剩余定理 Python版)

题目来源:2019牛客暑期多校训练营(第十场)

D - Han Xin and His Troops

题意:

  看标题就知道大概了,韩信点兵的典故我们应该都熟悉吧。

  给出 \(n\) 个同余方程,问是否存在不超过 \(m\) 的正整数解。

 

坑点:

  数据比较大,直接用 CRT 会爆 ll,这时候就用 Python 来实现。

 

AC代码:

n = 110         # 同余方程个数
a = [0]*110 # 余数
m = [0]*110 # 模数 """扩展欧几里得"""
def exgcd(a, b):
if 0 == b:
return 1, 0, a
x, y, q = exgcd(b, a % b)
x, y = y, (x - a // b * y)
return x, y, q """扩展中国剩余定理"""
def CRT():
if n == 1 :
if m[0] > a[0]:
return a[0];
else:
return -1; for i in range(n):
if m[i] <= a[i] :
return -1; x, y, d = exgcd(m[0], m[i])
if (a[i] - a[0]) % d != 0:
return -1; t = m[i] // d;
x = (a[i] - a[0]) // d * x % t
a[0] = x * m[0] + a[0];
m[0] = m[0] * m[i] // d;
a[0] = (a[0] % m[0] + m[0]) % m[0] return a[0]; n, k = map(int, input().split()) for i in range(n):
m[i], a[i] = map(int, input().split()) ans = CRT()
if ans==-1:
print("he was definitely lying")
elif ans<=k:
print(ans)
else :
print("he was probably lying")

 

 

PS:扩展中国剩余定理似乎与中国剩余定理(CRT)关系不大,以下给出推导过程。

 

对于一组同余方程

\[ \begin{cases}
{x} \equiv {a_1} \text{ mod } {m_1}\\
{x} \equiv {a_2} \text{ mod } {m_2}\\
\dots\\\\
{x} \equiv {a_n} \text{ mod } {m_n}\\ \end{cases}\]

我们通过依次合并两组方程得到新的同余方程,这样经过 \(n-1\) 次操作后,就能得到方程组的解。

首先对于前两组方程有:

\[ {x = a_1 + k_1m_1}\\
{x= a_2 + k_2m_2}\]

可得

\[{k_1m_1 - k_2m_2 = a_2-a_1}
\]

由扩展欧几里得,我们可以得到下面方程的解 \({x_0, y_0}\)

\[{x_0m_1 - y_0m_2 = (m_1, m_2)}
\]

设 \({d = (m_1, m_2)}\)

当且仅当 \({(a_2-a_1)} \text{ mod } {d = 0}\),方程有解。

所以

\[{x_0\frac{ a_2-a_1}{d}m_1 - y_0\frac{ a_2-a_1}{d}m_2 = a_2-a_1}
\]

所以我们得到 \(k_1\) 的一组解为

\[k_1 = x_0\frac{ a_2-a_1}{d}
\]

方程的通解形式为

\[k_1 = k_1+n\frac{m_2}{d}\\
k_2 = k_2-n\frac{m_1}{d}\]

\(k_1\) 的最小整数解为

\[k_1 = k_1\text{ mod } (m_2/d)
\]

代回原方程 $x = a_1+k_1n_1 $,我们得到 \(x\) 的解以及 \(a\).

此时方程组合并后的模数为

\[M = m_1*m_2/d
\]

因此原方程合并为

\[{x} = {a}\text{ mod } {M}
\]

 

Han Xin and His Troops(扩展中国剩余定理 Python版)的更多相关文章

  1. 2019牛客暑期多校训练营(第十场)Han Xin and His Troops——扩展中国剩余定理

    题意 求解 $n$ 个模方程 $x \equiv a (mod \ b)$,不保证模数互素($1 \leq n \leq 100$,$0 \leq b < a< 10^5$). 分析 套扩 ...

  2. Han Xin and His Troops

    Han Xin and His Troops 中国剩余定理 JAVA板子 /*中国剩余定理,根据公式需要求取大数的逆元*/ import java.math.BigInteger; import ja ...

  3. 扩展中国剩余定理 (exCRT) 的证明与练习

    原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...

  4. P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers

    P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...

  5. (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)

    前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...

  6. P4777 【模板】扩展中国剩余定理(EXCRT)

    思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...

  7. P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT

    EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...

  8. [poj2891]Strange Way to Express Integers(扩展中国剩余定理)

    题意:求解一般模线性同余方程组 解题关键:扩展中国剩余定理求解.两两求解. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1}\,\bmod \,{m_1}}\\{ ...

  9. 欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍

    1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. int gcd(int x,int y){ ?x:gcd(y,x%y); } int lcm(int x,int y){ return x* ...

随机推荐

  1. mysql 8+ 忘记root密码 解决方案

    在安装完数据库后,由于自己不小心直接关闭了安装窗口,或者长时间没有使用root用户登录系统,导致忘记了root密码,这时就需要重置MySQL的root密码.当然,最简单方式自然是删除数据库的data目 ...

  2. python代码{v: k for k, v in myArray.items()}是什么意思?

    最近在扒vnpy的源码总能看到{v: k for k, v in ORDERTYPE_VT2HUOBI.items()}这样的源码,就是不知道什么意思 然后万能的google找到了Quora的一个类似 ...

  3. ACM-ICPC 训练平台 & 比赛 分析

    the file can download in https://pan.baidu.com/s/1HwoLFHGAG-boQbIn9xIhxA occ5 the article is also pu ...

  4. unity 打包Apk生成签名证书keystore

    进行Android项目开发中想要将androidapp导出为apk的时候需要选择一个数字证书,即keystore文件(android.keystore),它用来对我们的APP进行签名,是导出APP的一 ...

  5. 云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析

    POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL.PostgreSQL.Oracle.POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB ...

  6. spring mvc hibernate spring 整合的增删改查+后台校验+bootstrap

    整合之前先知道大概的思路,首先要知道每个框架的重点要点. 1.首先我们从数据库开始 --创建数据库 create database gs --创建表 create table food ( id ,) ...

  7. BZOJ 4596: [Shoi2016]黑暗前的幻想乡(容斥+Matrix_Tree)

    传送门 解题思路 看到计数想容斥--\(from\) \(shadowice1984\)大爷.首先求出原图的生成树个数比较容易,直接上矩阵树定理,但这样会多算一点东西,会把\(n-2\)个公司的多算进 ...

  8. CF601C Kleofáš and the n-thlon(期望+前缀和优化dp)

    传送门 解题思路 要求这个人的排名,我们可以先求出某个人比他排名靠前的概率,然后再乘上\(m-1\)即为答案.求某个人比他排名靠前可以用\(dp\),设\(f[i][j]\)表示前\(i\)场比赛某人 ...

  9. NX二次开发-UF_MODL_intersect_objects获取两个对象的交点

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> #include < ...

  10. C#-Api:身份证识别

    ylbtech-C#-Api:身份证识别 通过POST上传base64格式的图片内容,可识别二代身份证.驾照.行驶证.军官证.中华人民共和国往来港澳通行证.台湾居民往来大陆通行证.大陆居民往来台湾通行 ...