《洛谷深入浅出进阶篇》同余方程+中国剩余定理——洛谷P1495

这篇文章讲介绍:同余方程,中国剩余定理

什么是同余方程?

x\equivy (mod p)这样的,带同余号的式子就是同余方程。

什么是中国剩余定理?

中国剩余定理,顾名思义是出自中国,它最早在《孙子算经》中出现,就是为了解决一类一元一次线性同余方程。

举个例子:

有一个数,对3取模为2,对5取模为3,对7取模为2 , 求这个数

写成同余方程就是:
1:x ==2(mod 3)
2:x ==2(mod 5)
3:x ==2(mod 7)
我们需要去解这个同余方程组。
就需要用到中国剩余定理(具体证明可以自查,这里只给出结论)

1:x ==a1(mod m1)
2:x ==a2(mod m2)
3:x ==a3(mod m3)
.....
n:  x == an ( mod mn )

其中m1,m2,m3......mn两两互质
第一步:设M=m1*m2*m3*.......mn =\prod_{i=1}^{n}m_{i}


第二步:设 bi = M / mi (整除)


第三步:设 inv(bi)\equiv bi^-1 (mod mi)   (不是bi的倒数,是bi模mi的逆元)

利用  bi * inv(bi) \equiv 1 (mod mi) 求出 inv(i)

我们就可以得到x的通解:
第四步:x= a1*b1*t1 + a2*b2*t2+…… an*bn*tn + kM = \prod_{i=1}^{n}ai*inv(bi)*bi;

代入上面的例子我们可以得到:x=23+k*105;

所以我们需要分成 四步来求,
第一步:累乘模数  M=m1*m2*……mn;
第二步:累乘结果除以对应模数: bi = M/mi
第三步:求bi模以mi的逆元 inv(bi) (用费马小定理,或exgcd)
第四步:求和    (余数*逆元*(模数之积/模数)) + k模数之积

也就是 x = [从i=0到i=n累加]:( ai*inv(bi)*bi )+ kM,

所以我们就求出了x的通式子,我们要算出最小正整数x应该咋办捏,就直接+M 在对M取模就行了嗷嗷嗷。
x=(x+M)%M;

 

洛谷P1495 曹冲养猪

设其一共有x只母猪。
已知数据:(为了套板子,直接把数组名换成熟悉的)
猪圈数:m1,m2,m3,m4……mn
剩余猪:a1,a2,a3,a4……an

也就是猪圈就是模数,剩余猪就是余数。
也就有同余方程组:

x==a1 (mod m1)
x==a2 (mod m2)
………………
x==an(mod mn)

接下来用中国剩余定理套板子即可:

第一步:求模数之积:M = m1*m2*m3……mn
第二步:求模数之积除以当前模数:bi=M/mi
第三步:求bi模以mi逆元inv(bi):

如何用exgcd求inv(bi)
下面推公式:
bi*inv(bi) = 1 (mod mi)
bi*inv(bi)+ y*mi = 1
exgcd(bi,mi,&inv(bi),&y)即可
数据保证 bi 与 mi 互质

第四步:求和
x = (求和)ai*bi*inv(bi)+kM
由于我们要求的是最小正整数的x,所以直接套公式:
x=(x+ai*bi*inv(bi)+M)%M;
x=(x%M+ai*bi*inv(bi)%M +M)%M;

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<cctype>
#include<map>
#include<set>
#include<queue>
#include<numeric>
#include<iomanip>
using namespace std;
typedef long long LL;
const int N = 20;void exgcd(int a, int b, int &x, int &y) {if (b == 0) {x = 1, y = 0;return;}exgcd(b, a % b, y, x);y -= a / b * x;
}
LL M = 1;
int inv[N], a[N], m[N];
LL b[N];
int t;
int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> m[i] >> a[i]; // m为模数,a为余数M *= m[i]; // 求模数之积}LL x = 0;for (int i = 1; i <= n; i++) {//求模数之积除以当前模数b[i] = M / m[i];exgcd(b[i], m[i], inv[i], t);inv[i] = (m[i] + inv[i]) % m[i];while (a[i]--) {x = (x + inv[i] * b[i])%M;}}cout << x;}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql获取时间异常

1.查看系统时间 时区是上海&#xff0c;本地时间正常 [roottest etc]# timedatectlLocal time: 一 2023-12-04 17:00:35 CSTUniversal time: 一 2023-12-04 09:00:35 UTCRTC time: 一 2023-12-04 09:00:34Time zone: Asia/Shanghai (CST, 0800)NTP enabled: no NTP synchroni…

Nginx(缓冲区)

先来思考一个问题&#xff0c;接入Nginx的项目一般请求流程为&#xff1a;“客户端→Nginx→服务端”&#xff0c;在这个过程中存在两个连接&#xff1a;“客户端→Nginx、Nginx→服务端”&#xff0c;那么两个不同的连接速度不一致&#xff0c;就会影响用户的体验&#xff08;…

CoSeR: Bridging Image and Language for Cognitive Super-Resolution

主页&#xff1a;CoSeR: Bridging Image and Language for Cognitive Super-Resolution (coser-main.github.io) 图像超分辨率技术旨在将低分辨率图像转换为高分辨率图像&#xff0c;从而提高图像的清晰度和细节真实性。这项技术在手机拍照等领域有着广泛的应用和需求。随着超…

Redis5新特性-stream

Stream队列 Redis5.0 最大的新特性就是多出了一个数据结构 Stream&#xff0c;它是一个新的强大的 支持多播的可持久化的消息队列&#xff0c;作者声明 Redis Stream 地借鉴了 Kafka 的设计。 生产者 xadd 追加消息 xdel 删除消息&#xff0c;这里的删除仅仅是设置了标志位&am…

vue.js el-table 动态单元格列合并

一、业务需求&#xff1a; 一个展示列表&#xff0c;表格中有一部分列是根据后端接口动态展示&#xff0c;对于不同类型的数据展示效果不一样。如果接口返回数据是’类型1‘的&#xff0c;则正常展示&#xff0c;如果是’类型2‘的数据&#xff0c;则合并当前数据的动态表格。…

RTSP流媒体播放器

rtsp主要还是运用ffmpeg来搭建node后端转发到前端&#xff0c;前端再播放这样的思路。 这里讲的到是用两种方式&#xff0c;一种是ffmpeg设置成全局来实现&#xff0c;一种是ffmpeg放在本地目录用相对路径来引用的方式。 ffmpeg下载地址&#xff1a;http://www.ffmpeg.org/do…

焊接专业个人简历(通用25篇)

如果大家想在焊接行业的求职中脱颖而出&#xff0c;轻松斩获心仪职位&#xff0c;参考这25篇通用的焊接专业个人简历案例&#xff0c;无论您是初学者还是资深焊工&#xff0c;都能从中找到适合自己的简历内容。参考这些简历&#xff0c;让您的求职之路更加顺畅。 焊接专业个人…

软件工程 课后题 选择 查缺补漏

在一张状态图中只能有一个初态&#xff0c;而终态则可以没有&#xff0c;也可以有多个 所有的对象可以成为各种对象类&#xff0c;每个对象类都定义了一组 方法 通过执行对象的操作可以改变对象的属性&#xff0c;但它必须经过 消息 的传递 UML应用于 基于对象的面向对象的方…

nn.AdaptiveAvgPool2d(output_size)输入和输出怎么回事?

前言 nn.AdaptiveAvgPool2d(output_size) 函数作用&#xff1a;自适应进行平均池化。不用管输入、stride、padding&#xff0c;函数参数只有输出大小&#xff0c;其他的这个函数帮你搞定。 问题就是&#xff0c;我想知道他是咋搞定的&#xff1f; 1 函数的使用 先把例子摆上…

React Native expo Android adb 调试出现 device not found 怎么办

背景 最近接了一个项目&#xff0c;app 壳子跳转 webview 内嵌 h5 页面&#xff0c;但是壳子是另外一个团队负责的&#xff0c;我们没有源代码&#xff0c;没法办法调试。沟通排查问题很麻烦&#xff0c;后来发现了 Expo 这个工具&#xff0c;可以快速用 React Native 在本地搭…

C++ String 详解

C 中的 string 类型是一个强大而灵活的字符串处理工具&#xff0c;为初学者提供了许多方便的方法来操作文本数据。 1. 引入头文件 在使用 string 之前&#xff0c;首先需要引入头文件 <string>。 #include <string> using namespace std; 2. 基本声明与初始化 …

年底了,项目预算怎么创建?9个步骤直接搞定

如果将项目比作一辆汽车&#xff0c;那么预算就是它的燃料。就像汽车需要汽油一样&#xff0c;项目也需要资金和资源来维持运转。而作为项目经理&#xff0c;应该尽量用最有效的方式规划和使用这些资源&#xff0c;使项目按时交付。 项目预算是一项计划&#xff0c;其中详细说…

Gorm框架入门

文章目录 安装连接数据库Gorm基本示例自动迁移创建数据行查询数据更新数据删除数据 Gorm Model主键表名列名 时间戳CreatedAtUpdatedAtDeletedAt GORM&#xff08;Go Object Relational Mapper&#xff09;是一个在Go语言中使用的对象关系映射&#xff08;ORM&#xff09;库。它…

C++基础 -37- 模板函数与普通函数调用规则

当模板函数比普通函数更好匹配形参的时候&#xff0c;会优先调用模板函数 #include "iostream"using namespace std;template <class T> void show(T a, T b) {cout << a << endl;cout << b << endl;cout << "temp show&…

华为认证 | HCIP和HCIE差别很大吗?

根据ICT从业者的学习和进阶需求&#xff0c;华为认证分为工程师级别、高级工程师级别和专家级别三个认证等级&#xff0c;分别就是HCIA、HCIP以及HCIE。 这三个级别中&#xff0c;HCIA作为一个比较入门级别的考试&#xff0c;选择的人比较少&#xff0c;大多数小伙伴可能会更关…

idea中如何使用git?

在 IntelliJ IDEA 中使用 Git 进行版本控制是一个常见且重要的操作。以下是使用 Git 的基本步骤&#xff0c;包括如何在 IDEA 中设置 Git&#xff0c;以及执行常用的 Git 操作。 1. 安装 Git 首先&#xff0c;确保您的计算机上已安装 Git。您可以从 Git 的官方网站 下载并安装…

【MATLAB源码-第92期】基于simulink的QPSK调制解调仿真,采用相干解调对比原始信号和解调信号。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 QPSK&#xff0c;有时也称作四位元PSK、四相位PSK、4-PSK&#xff0c;在坐标图上看是圆上四个对称的点。通过四个相位&#xff0c;QPSK可以编码2位元符号。图中采用格雷码来达到最小位元错误率&#xff08;BER&#xff09; —…

销售时如何站在客户角度思考问题?

销售时如何站在客户角度思考问题&#xff1f; 好的&#xff0c;以下是对提供的内容进行润色后的结果&#xff1a; 当销售时&#xff0c;如何站在客户的角度去思考问题呢&#xff1f;这需要我们具备一种换位思考的能力&#xff0c;从客户的角度出发&#xff0c;了解他们的需求…

Taro H5 在支付宝打开白屏的问题解决

一、前言 问题描述&#xff1a;基于 taro 框架的 H5&#xff0c;本地构建或者发到服务器后&#xff0c;安卓手机在支付宝APP中打开链接呈现白屏的情况&#xff0c;但是在其他浏览器或者微信中打开正常&#xff1b;问题根源&#xff1a;由于支付宝的 webview 浏览器内核不支持 …

INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务&#xff08;含公有云、私有云、混合云、桌面云&#xff09;推出的一项合作伙伴计划&#xff0c;旨在为构建持续发展、合作共赢的鲲鹏生态圈&#xff0c;通过整合华为的技术、品牌资源&#xff0c;与合作伙伴共享商机和利…