中国剩余定理CRT

文章目录

  • 作用
  • 证明
  • AcWing 204. 表达整数的奇怪方式
    • CODE



作用

用于求模数两两互质的线性同余方程组,若不互质则不存在解。
《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?这就是经典的剩余定理问题,也是我们小学题目:三个三个数余二,五个五个数余三,七个七个数余二,求这个数是几? { x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 2 ( m o d 7 ) \left\{ \begin{array}{c} x ≡ 2\ (mod\ 3)\\ x ≡ 3\ (mod\ 5)\\ x ≡ 2\ (mod\ 7) \end{array} \right. x2 (mod 3)x3 (mod 5)x2 (mod 7)

更多详细介绍请看VCR: 中国剩余定理的由来与求解过程。


证明

请看题解:https://www.acwing.com/solution/content/3539/ 和https://www.acwing.com/solution/content/23099/

思路就是:先读入一个式子,然后以这个式子为基准,再读入一个式子,找他们的通解,将式子更新为他们的通解,然后再读入,继续找通解,直到读完。

证明过程太纷繁复杂,蒟蒻的我选择直接记公式:

  • 每次更新完,式子变为: x = k ∗ l c m ( a 1 , a 2 ) + k 1 ∗ a 1 + m 1 = k ∗ a 0 + m 0 x = k * lcm(a_1, a_2) + k_1 * a_1 + m_1 = k * a_0 + m_0 x=klcm(a1,a2)+k1a1+m1=ka0+m0
    所以我们需要更新: a 1 = l c m ( a 1 , a 2 ) = a 1 / d ∗ a 2 m 1 = k 1 ∗ a 1 + m 1 a_1 = lcm(a_1, a_2) = a_1 / d * a_2\\ m_1 = k_1 * a_1 + m_1 a1=lcm(a1,a2)=a1/da2m1=k1a1+m1
    在这之前我们需要将 k 1 k_1 k1 的值更新出来: k 1 = ( ( m 2 − m 1 ) / d ∗ k 1 ) % ( a 2 / d ) k_1 = ((m2 - m1) / d * k_1) \%\ (a2 / d) k1=((m2m1)/dk1)% (a2/d) 就是求最小公倍数,然后取模求最小解。

    到最后,我们求的 m 1 m_1 m1 即为 x x x,求个模找最小即可。


AcWing 204. 表达整数的奇怪方式

题目链接:https://www.acwing.com/activity/content/problem/content/948/

CODE

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std;typedef long long ll;  // 定义长整型别名为ll// 扩展欧几里得算法,求解ax + by = gcd(a, b)的一组解
ll exgcd(ll a, ll b, ll &x, ll &y){if(b == 0){  	// 当b为0时,x为1,y为0x = 1, y = 0;return a;  // 返回最大公约数}ll x1, y1;ll d = exgcd(b, a % b, x1, y1);  // 递归求解x = y1, y = x1 - a / b * y1;  	// 更新x和yreturn d;  	// 返回最大公约数
}int main(){int n;  // 定义整型变量nscanf("%d", &n);  // 输入nll a1, m1, x = 0;  // 定义长整型变量a1, m1, x,并初始化x为0cin >> a1 >> m1;  	// 输入a1和m1for(int i = 0; i < n - 1; ++i){ll a2, m2, k1, k2;  // 定义长整型变量a2, m2, k1, k2cin >> a2 >> m2;  	// 输入a2和m2ll d = exgcd(a1, a2, k1, k2);  // 调用扩展欧几里得算法求解最大公约数if((m1 - m2) % d){  // 如果(m1 - m2)不能被d整除x = -1;  	// x赋值为-1break;  	// 跳出循环}k1 = k1 * (m2 - m1) / d;  // 更新k1ll t = abs(a2 / d);  	// 定义长整型变量t,并赋值为a2/d的绝对值k1 = (k1 % t + t) % t;  // 更新k1m1 = k1 * a1 + m1;  	// 更新m1a1 = abs(a1 * a2 / d);  // 更新a1}if(x != -1) x = (m1 % a1 + a1) % a1;  // 如果x不等于-1,则更新xcout << x << endl;  // 输出x
}

真的nm太抽象了吧,这玩意儿是人学的?我选择直接背,以我的水平考到了也做不出来。

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

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

相关文章

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

【Java】SpringBoot中实现Redis Stream队列

SpringBoot实现Redis Stream队列 前言 简单实现一下在SpringBoot中操作Redis Stream队列的方式&#xff0c;监听队列中的消息进行消费。 jdk&#xff1a;1.8 springboot-version&#xff1a;2.6.3 redis&#xff1a;5.0.1&#xff08;5版本以上才有Stream队列&#xff09;…

C++实现简单的猜数字小游戏

猜数字 小游戏介绍&#xff1a;猜数字游戏是令游戏机随机产生一个100以内的正整数&#xff0c;用户输入一个数对其进行猜测&#xff0c;需要你编写程序自动对其与随机产生的被猜数进行比较&#xff0c;并提示大了&#xff0c;还是小了&#xff0c;相等表示猜到了。如果猜到&…

网络(九)三层路由、DHCP以及VRRP协议介绍

目录 一、三层路由 1. 定义 2. 交换原理 3. 操作演示 3.1 图示 3.2 LSW1新建vlan10、20、30&#xff0c;分别对应123接口均为access类型&#xff0c;接口4为trunkl类型&#xff0c;允许所有vlan通过 3.3 LSW2新建vlan10、20、30&#xff0c;配置接口1为trunk类型&…

报数游戏C语言

分析:掌握数字移动的规律&#xff0c;以及判断&#xff0c;我们可以用一个二维数组来记录每一个人说的数字&#xff0c;就像第一张图片一样&#xff0c;西安向右边移动&#xff0c;再向左下移动&#xff0c;再向左边移动&#xff0c;在向右边移动&#xff0c;在可以用一个数组来…

微服务保护--线程隔离(舱壁模式)

一、线程隔离的实现方式 线程隔离有两种方式实现&#xff1a; 线程池隔离 信号量隔离&#xff08;Sentinel默认采用&#xff09; 如图&#xff1a; 线程池隔离&#xff1a;给每个服务调用业务分配一个线程池&#xff0c;利用线程池本身实现隔离效果 信号量隔离&#xff1a…

数据分析(一)(附带实例和源码)

一、主要目的&#xff1a; 主要利用Python包&#xff0c;如Numpy、Pandas和Scipy等常用分析工具并结合常用的统计量来进行数据的描述&#xff0c;把数据的特征和内在结构展现出来。熟悉在Python开发环境中支持数据分析的可用模块以及其中的方法&#xff0c;基于一定的样例数据…

前端视角看 Docker : 基础命令全面指南

引言 Docker是一种开源的容器化平台&#xff0c;它允许开发者将应用程序和其依赖打包在一个轻量级的、可移植的容器中。这使得应用程序在不同的环境中部署变得简单且高效。本文将介绍Docker的一些基础命令和概念&#xff0c;帮助初学者快速上手。 1. Docker简介 Docker使用…

pl_vio线特征·part II

pl_vio线特征part II 0.引言4.线段残差对位姿的导数4.1.直线的观测模型和误差4.2.误差雅克比推导4.3.误差雅可比求导简洁版(不含imu坐标系转换)4.4.相关代码 0.引言 pl_vio线特征part I 现在CSDN有字数限制了&#xff0c;被迫拆分为两篇文章。 4.线段残差对位姿的导数 这一小…

ASP.NET MVC权限管理系实战之一验证码功能实现

1&#xff0c;权限的管理系统&#xff1a;开发项目必备的一个的功能&#xff1b;该项目使用 ASP.NET MVC5 SqlServer EF6 IOC容器 BoostStrap 2&#xff0c;登录界面验证码功能实现&#xff0c;整体效果如下&#xff1b; 3&#xff0c;接下来就是代码部分实现&#xff0c;前端…

白盒测试、接口测试、自动化测试

一、什么是白盒测试 白盒测试是一种测试策略&#xff0c;这种策略允许我们检查程序的内部结构&#xff0c;对程序的逻辑结构进行检查&#xff0c;从中获取测试数据。白盒测试的对象基本是源程序&#xff0c;所以它又称为结构测试或逻辑驱动测试&#xff0c;白盒测试方法一般分…

在Windows上通过VS2019自带的Cmake来编译OpenCV-4.5.3源码

文章目录 用VS打开OpenCV源码cmake的配置及生成操作生成及安装 用VS打开OpenCV源码 方式一&#xff1a;文件–》打开–》Cmake 找到源码根目录下CMakeLists.txt文件 导入即可。 方式二&#xff1a;在开始使用这里 选择 打开本地文件夹 找到源码的根目录&#xff0c;导入即可…

[NAND Flash 4.1] Flash(闪存)存储器底层原理 | 闪存存储器重要参数

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​全文 5000 字。 从底层物理原理上了解 Nand Flash。 1. 存储器诞生&#xff1a; 现代计算机使用存储器来存储数据&#xff0c;其…

插入排序----希尔排序

希尔排序 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个gap组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述分组和排序…

QT:Unable to create a debugging engine.

debug跑不了&#xff1a; 报错&#xff1a;Unable to create a debugging engine. 参考&#xff1a; https://blog.csdn.net/u010906468/article/details/104716198 先检查是否安装了DEBUG插件 工具-》》选项 查看插件&#xff0c;如果没有的话&#xff0c;需要重新安装qt时…

加密的艺术:对称加密的奇妙之处(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

一些关于fMRI脑数据的预处理工具

一些关于fMRI脑数据的预处理工具 前言概述SPM12工具箱FSL工具箱FreeSurfer工具箱BrainNet Viewer工具箱circularGraph工具箱Nipype集成框架fMRIPrep集成框架参考文献 前言 March 25, 2022 这里是关于fMRI脑数据的预处理工具的相关调研 主要是关于数据的预处理&#xff0c;数据…

Windows环境提示“‘mysql‘ 不是内部或外部命令,也不是可运行的程序或批处文理件” 简易记录

在Windows环境下使用DOS命令窗登入MYSQL&#xff0c;提示“mysql 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。” 这意味着系统无法找到 mysql.exe可执行文件&#xff0c;这是因为 MySQL 没有正确安装或未添加到系统PATH环境变量中所致。 处理方法&#x…

分组背包问题笔记

分组背包是选不同的组&#xff0c;每个组中只能选一个物品。分组背包就是01背包的变种&#xff0c;多重背包就是特殊的分组背包。 //分组背包 #include<iostream> using namespace std; const int N 110; int f[N], v[N], w[N], n, m;int main() {ios::sync_with_stdio(…

ShardingSphereJDBC简单入门

ShardingSphere 介绍ShardingSphere-JDBCSharding-Sphere-ProxyShardingSphere-Sidecar混合架构运行模式DistSQL可拔插架构ShardingSphere的发展路线 主从复制ShardingSphere-JDBC功能SQL解析SQL支持程度SQL稳定支持SQL实验性支持 MySQL不支持SQL清单分页 数据分片垂直分片水平…