中国剩余定理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。它已被宣布为关…

Flink系列之:Over聚合

Flink系列之&#xff1a;Over聚合 一、Over聚合二、ORDER BY三、PARTITION BY四、范围&#xff08;RANGE&#xff09;定义五、RANGE 间隔六、ROW 间隔 适用于流、批 一、Over聚合 OVER 聚合通过排序后的范围数据为每行输入计算出聚合值。和 GROUP BY 聚合不同&#xff0c; OV…

log4j2配置文件log4j2.xml详解

1、缺省默认配置文件 <?xml version"1.0" encoding"UTF-8"?><Configuration status"WARN"><Appenders><Console name"Console" target"SYSTEM_OUT"><PatternLayout pattern"%d{HH:mm:ss…

Android Studio Gradle构建很慢,下载依赖缓慢问题

在项目的 build.gradle或setting.gradle&#xff08;Android Studio新老版本配置不同&#xff09;中配置镜像源 阿里云&#xff1a; maven { url https://maven.aliyun.com/repository/gradle-plugin } maven { url https://maven.aliyun.com/repository/spring-plugin } mav…

【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类型&…

创维电视机 | 用当贝播放器解决创维电视机不能播放MKV视频的问题

小故事在下面&#xff0c;感兴趣可以看看&#xff0c;开头我就直接放解决方案 创维电视虽然是基于Android开发的&#xff0c;可以安装apk软件&#xff0c;但是基本不能用&#xff0c;一定要选择适配电视的视频播放器&#xff0c;或者使用本文中提供的创维版当贝播放器。 原软…

Java常见异常名称

java.lang.NullPointerException 空指针异常 java.lang.ClassNotFoundException 指定的类不存在 java.lang.NumberFormatException 字符串转换为数字异常 java.lang.IndexOutOfBoundsException 数组下标越界异常 java.lang.IllegalArgumentExcepti…

报数游戏C语言

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

策略模式学习

使用场景 一个方法有很多的实现方式&#xff0c;并且需要使用if else等分支逻辑选择使用哪种实现方式 术语 环境 维护策略对象的引用&#xff0c;负责将请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式获取具体策略对象 抽象策略 定义了策略类的公…

什么是Laravel?它有哪些特性?

Laravel 是一款流行的 PHP Web 框架&#xff0c;设计用于构建现代、优雅且功能强大的 Web 应用程序。它提供了一套丰富的工具和库&#xff0c;以简化常见的开发任务&#xff0c;同时保持灵活性和可扩展性。以下是 Laravel 框架的一些主要特性&#xff1a; 优雅的语法&#xff1…

C#学习相关系列之自定义遍历器

在C#中&#xff0c;自定义遍历器需要实现IEnumerable接口和IEnumerator接口。其中&#xff0c;IEnumerable接口包含一个GetEnumerator方法&#xff0c;该方法返回一个IEnumerator接口的实例&#xff0c;而IEnumerator接口包含Current、MoveNext和Reset方法。 IEnumerable&#…

SVG 生成 Vector 资源文件批量及编辑预览工具

SVG 生成 Vector 资源文件批量及编辑预览工具 一、SVG2Vector批量工具 首先&#xff0c;源码地址&#xff1a;github.com/MegatronKin… 其次&#xff0c;下载地址&#xff1a; SVG生成Vector资源文件批量资源-CSDN文库 示例1&#xff1a; java -jar svg2vector-cli-1.0.0…

实验二:流水线及流水线中的冲突

一、实验目的 加深对计算机流水线基本概念的理解。理解MIPS结构如何用5段流水线来实现&#xff0c;理解各段的功能和基本操作。加深对数据冲突、结构冲突的理解&#xff0c;理解这两类冲突对CPU性能的影响。进一步理解解决数据冲突的方法&#xff0c;掌握如何应用定向技术来减…

【vue filters 过滤器】vue页面 全局使用

【vue filters 过滤器】vue页面 全局使用 1、在根目录common文件下创建filters. // 全局 过滤器 export const filters {// "订单状态 1待接单 2配送中 3已送达 4已完成 -1已取消") orderStatus;orderStatus: val > {let result nullswitch (val) {case 0:ret…

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

一、线程隔离的实现方式 线程隔离有两种方式实现&#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.线段残差对位姿的导数 这一小…