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

news2024/10/6 16:16:39

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

什么是同余方程?

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.coloradmin.cn/o/1282899.html

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

相关文章

并查集LRU Cache

目录 前言 一 . 并查集 1.1 并查集原理 1.2 并查集的实现 二 . LRU Cache 2.1 什么是LRU Cache 2.2 LRU Cache实现 2.3 JDK中类似LRUCahe的数据结构LinkedHashMap 2.4 自己实现链表 总结 前言 大家好,今天给大家介绍两种数据结构并查集&LRU Cache 一 . 并查集 1…

Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&a…

智能优化算法应用:基于和声算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于和声算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于和声算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.和声算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

分享86个焦点幻灯JS特效,总有一款适合您

分享86个焦点幻灯JS特效&#xff0c;总有一款适合您 86个焦点幻灯JS特效下载链接&#xff1a;https://pan.baidu.com/s/1Gm2jwN_AAF9QjFzQ9bCM_g?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;…

OWASP SAMM 软件保障成熟度模型

软件保障成熟度模型 我们的使命是为您提供一种有效且可衡量的方式来分析和改进您的安全开发生命周期。 SAMM 支持完整的软件生命周期&#xff0c;并且与技术和流程无关。我们构建的 SAMM 本质上是不断发展和风险驱动的&#xff0c;因为没有一种单一的配方适用于所有组织。奥瓦…

无公网IP环境固定地址远程SSH访问本地树莓派Raspberry Pi

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

「Swift」取消UITableView起始位置在状态栏下方开始

前言&#xff1a;在写页面UI时发现&#xff0c;当隐藏了NavigationBar时&#xff0c;即使UITableView是从(0,0)进行布局&#xff0c;也会一直在手机状态栏下方进行展示布局&#xff0c;而我的想法是希望UITableView可以从状态栏处就进行展示布局 当前页面展示&#xff1a; 问题…

适合学生备考的护眼台灯有哪些?五款公认优质台灯推荐

根据近两年的卫计委数据统计&#xff0c;我国的近视率全球第一。其中小学生平均近视率36%&#xff0c;初中平均近视率71.6%&#xff0c;高中生平均近视率81%。看到这些数据真让作为家长的我们触目惊心。 而这里面&#xff0c;先天的遗传近视并不多&#xff0c;很多的学生近视都…

leecode | 从二叉搜索树到更大和树

官方的题目解释永远晦涩难懂 这就是最大的拦路虎 简单介绍&#xff0c;将二叉搜索树&#xff0c;转换成“更大和树”&#xff0c;“最大的和树”&#xff0c;就是更新节点val&#xff0c;二叉树中所有大于等于该节点的的val 总和&#xff0c;包括本身 #对着图看&#xff0c;会更…

【CANN训练营】ROS2系统及使用介绍

ROS2系统及使用介绍 ROS2介绍及特点介绍 ROS2简介 要说ROS2&#xff0c;那就不得不提起ROS&#xff0c;ROS就是机器人操作系统英文全称(Robot Operating System)&#xff0c;但ROS本身并不是一个操作系统&#xff0c;而是可以安装在现在已有的操作系统上(Linux、Windows、Ma…

自动化测试的4大注意事项

自动化测试能够提高测试效率、覆盖率&#xff0c;降低测试成本和工作量&#xff0c;是软件开发中不可或缺的一部分。但前提是要确保自动化测试的有效性和可靠性&#xff0c;否则无效或错误的自动化测试&#xff0c;往往会对项目造成负面影响&#xff0c;如维护成本高、假阳性和…

面试必会-JAVA基础篇-01

文章目录 1. Final 有什么用&#xff1f;2. 什么是重载&#xff08;Overload&#xff09;和重写&#xff08;Override&#xff09; ?3. 重载的方法能否根据返回类型进行区分&#xff1f;4. 和 equals 的区别是什么5. 什么是反射机制&#xff1f;6. 反射机制优缺点7. 在你进行…

揭秘MySQL索引世界:概念、分类、应用场景一网打尽

一、索引概念 MySQL索引是一种用于提高数据库查询性能的数据结构。它允许数据库系统更有效地检索数据行&#xff0c;减少了在大型数据集中搜索特定数据的时间。索引的作用类似于书籍的目录&#xff0c;通过提供关键字与实际数据位置之间的映射&#xff0c;加速对数据库表中数据…

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

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

中国信通院公布2023下半年“可信数据库”测试结果

什么是可信数据库&#xff1f;定义具有强制和自主访问控制、审计、数据完整性、身份识别和鉴别、主客体分离等功能的数据库系统。是经过中国信通院评测的数据库产品及周边工具、数据库服务商和应用侧为评价目标的权威评测体系。 该体系包括基础能力、安全、性能、稳定性、服务商…

外包干了4年,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

基于HTML、CSS、JavaScript的网页设计

一、网页界面效果&#xff1a; 二、HTML代码&#xff1a; <!DOCTYPE html> <!-- 声明文档类型--> <html lang"en"> …

go自定义端口监听停用-------解决端口被占用的问题

代码 package mainimport ("fmt""log""net""os/exec""strconv""strings" )func getSelect(beign int, end int) int {var num intfor {_, err : fmt.Scan(&num)if err ! nil {fmt.Println("输入错误&am…

BUUCTF 小易的U盘 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 小易的U盘中了一个奇怪的病毒&#xff0c;电脑中莫名其妙会多出来东西。小易重装了系统&#xff0c;把U盘送到了攻防实验室&#xff0c;希望借各位的知识分析出里面有啥。请大家加油噢&#xff0c;不过他特别关照&a…

Unity加载配置文件【解析Json】

Json 文件 Json文件的存储&#xff1a; 存储在StreamingAssets目录下的&#xff1a;//这里用了游戏配置表常用的Json存储格式-对象数组 {"data":[{"id": 1001,"name": "ScreenFront_1",},{"id": 1002,"name": &…