Han Xin and His Troops(扩展中国剩余定理 Python版)
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)关系不大,以下给出推导过程。
对于一组同余方程
{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_2 + k_2m_2}\]
可得
\]
由扩展欧几里得,我们可以得到下面方程的解 \({x_0, y_0}\)
\]
设 \({d = (m_1, m_2)}\)
当且仅当 \({(a_2-a_1)} \text{ mod } {d = 0}\),方程有解。
所以
\]
所以我们得到 \(k_1\) 的一组解为
\]
方程的通解形式为
k_2 = k_2-n\frac{m_1}{d}\]
\(k_1\) 的最小整数解为
\]
代回原方程 $x = a_1+k_1n_1 $,我们得到 \(x\) 的解以及 \(a\).
此时方程组合并后的模数为
\]
因此原方程合并为
\]
Han Xin and His Troops(扩展中国剩余定理 Python版)的更多相关文章
- 2019牛客暑期多校训练营(第十场)Han Xin and His Troops——扩展中国剩余定理
题意 求解 $n$ 个模方程 $x \equiv a (mod \ b)$,不保证模数互素($1 \leq n \leq 100$,$0 \leq b < a< 10^5$). 分析 套扩 ...
- Han Xin and His Troops
Han Xin and His Troops 中国剩余定理 JAVA板子 /*中国剩余定理,根据公式需要求取大数的逆元*/ import java.math.BigInteger; import ja ...
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)
前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
- [poj2891]Strange Way to Express Integers(扩展中国剩余定理)
题意:求解一般模线性同余方程组 解题关键:扩展中国剩余定理求解.两两求解. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1}\,\bmod \,{m_1}}\\{ ...
- 欧几里得(辗转相除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* ...
随机推荐
- JavaScript中的节流和防抖
节流: 在规定时间内,多次触发事件,但是只执行一次 场景:输入框搜索,地图渲染 优化用户体验 /** * 节流 规定时间内不管触发多少次只执行一次 * @param {Function} fn 实际要 ...
- mysql查看数据库大小或者表大小
要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了数据库的信息) use information_schema; 2.查询所有数据库的大小: sel ...
- openstack nova 源码解析 — Nova API 执行过程从(novaclient到Action)
目录 目录 Nova API Nova API 的执行过程 novaclient 将 Commands 转换为标准的HTTP请求 PasteDeploy 将 HTTP 请求路由到具体的 WSGI Ap ...
- ASP.NET MVC Controller激活系统详解2
一.引言 此篇博文紧接上篇博文进行阐述,本篇博文阐述的主题是Controller激活和url路由 二.总述 ASP.NET路由系统是HTTP请求抵达服务端的第一道屏障,它根据注册的路由规则对拦截的请求 ...
- ActiveMQ任意文件写入漏洞(CVE-2016-3088)
上传webshell 容器用vulhub的 PUT一个jsp文件 MOVE到api目录 默认的ActiveMQ账号密码均为admin,首先访问http://your-ip:8161/admin/tes ...
- Day 9 :初识函数
Python函数:1.函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 2.函数能提高应用的模块性,和代码的重复利用率. Python提供了许多内建函数,比如print().但你也可 ...
- Python flask构建微信小程序订餐系统✍✍✍
Python flask构建微信小程序订餐系统 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...
- nginx基础内容
1.配置文件结构图 2.作用1:静态文件服务器 http { server { listen ; location / { root /data/www; } location /images/ { ...
- JAVA API about HTTP 3
package com.han.http; import java.io.IOException; import java.io.UnsupportedEncodingException; impor ...
- 记录装CDH新增加一些遇到问题的解决
报错信息:MainThread agent ERROR Heartbeating to localhost:7182 failed.解决:配置CM Agentcm的安装包的server和agent都是 ...