当前位置: 首页 > news >正文

记录:扩展欧几里得算法

本文遵循 CC BY-NC-ND 4.0 协议,作者: U•ェ•*U \texttt{U•ェ•*U} U*U,转载请获得作者授权。

前置知识

裴蜀定理/贝祖定理:若 a , b a,b a,b 是整数,且 gcd ⁡ ( a , b ) = d \gcd(a,b)=d gcd(a,b)=d,那么对于任意整数 x , y x,y x,y a × x + b × y = k a\times x + b\times y = k a×x+b×y=k 中的 k k k 一定是 d d d 的倍数。(特别地,如果 a , b a,b a,b 是整数,那么一定存在整数 x , y x,y x,y 使得 a × x + b × y = gcd ⁡ ( a , b ) a\times x + b\times y = \gcd(a,b) a×x+b×y=gcd(a,b)

引入

引入扩展欧几里得算法,可用于求解以下几种问题:

  • 给定两个非零的整数 a a a b b b,求一组整数解 ( x , y ) (x,y) (x,y) 使得 a × x + b × y = gcd ⁡ ( a , b ) a\times x + b\times y = \gcd(a,b) a×x+b×y=gcd(a,b) 成立,其中 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 表示 a a a b b b 的最大公约数。
  • 逆元

从欧几里得算法推导:
gcd ⁡ ( x , y ) → gcd ⁡ ( y , x m o d y ) ⇓ ∀ x n = 1 , y n = 0 ∀ a × x 1 + b × x 1 = gcd ⁡ ⇓ ∀ b × x 2 + ( a m o d b ) × y 2 = gcd ⁡ ∀ a × x 1 + b × x 1 = b × x 2 + ( a m o d b ) × y 2 ∀ a × x 1 + b × y 1 = a × y 1 + b × ( x 2 × a b × y 2 ) \gcd(x, y) \to \gcd(y, x \mod y) \\ \Downarrow \\ \forall x_{n} = 1, y_{n} = 0 \\ \\ \forall a\times x_1 + b \times x_1 = \gcd \\ \Downarrow \\ \forall b\times x_2 + (a\mod b)\times y_2 = \gcd \\ \forall a\times x_1 + b \times x_1 = b\times x_2 + (a\mod b)\times y_2 \\ \forall a\times x_1 + b \times y_1 = a\times y_1 + b\times (x_2\times \frac{a}{b}\times y_2) gcd(x,y)gcd(y,xmody)xn=1,yn=0a×x1+b×x1=gcdb×x2+(amodb)×y2=gcda×x1+b×x1=b×x2+(amodb)×y2a×x1+b×y1=a×y1+b×(x2×ba×y2)

于是反推出原来的值( x 1 , y 1 x_1, y_1 x1,y1):

void exgcd(int a, int b, int &x, int &y) {if (a % b == 0) x = 0, y = 1;else {exgcd(b, a % b, y, x);y -= a / b * x;}
}

证明:
[TODO]

求同余式

对两个整数 a , b a, b a,b,如果它们除以 d d d 的余数相同,则称它们模 d d d 同余,记作 a ≡ b ( m o d d ) a\equiv b (\mod d) ab(modd)

在同余号两侧同时加、减、乘任意整数,同余式仍成立。

我们设一个同余式 a x ≡ c ( m o d m ) ax\equiv c (\mod m) axc(modm),那么可以分讨求解:

  • c m o d gcd ⁡ ( a , m ) ≠ 0 c\mod \gcd(a,m) \neq 0 cmodgcd(a,m)=0,则同余方程 a x ≡ c ( m o d m ) ax\equiv c(\mod\ m) axc(mod m) 无解。
  • c m o d gcd ⁡ ( a , m ) = 0 c\mod \gcd(a, m) = 0 cmodgcd(a,m)=0,则同余方程的解为 $x’ = x + \frac{\gcd(a, m)}{m}\times \mathbb{N} $。

求逆元

对任意给定的 x x x p p p,显然 x × x − 1 ≡ 1 ( m o d p ) x \times x ^ {-1} \equiv 1 (\mod p) x×x11(modp)。可以利用
这个式子计算 x − 1 x ^ {-1} x1

其中 x x x p p p 是已知量,所以上式是一个不定方程, x − 1 x ^ {−1} x1 k k k
是变量。用 exgcd \texttt{exgcd} exgcd 求解可以得到 x − 1 x ^ {−1} x1

C++ \texttt{C++} C++ 代码(线性求逆元):

int n, p, inv[3000010];
signed main() {cin >> n >> p;inv[1] = 1;cout << 1 << endl;for (int i = 2; i <= n; i ++) {inv[i] = (int)(p - p / i) * inv[p % i] % p;printf("%lld\n", inv[i]);}return 0;
}

相关文章:

记录:扩展欧几里得算法

本文遵循 CC BY-NC-ND 4.0 协议&#xff0c;作者&#xff1a; U•ェ•*U \texttt{U•ェ•*U} U•ェ•*U&#xff0c;转载请获得作者授权。 前置知识 裴蜀定理/贝祖定理&#xff1a;若 a , b a,b a,b 是整数&#xff0c;且 gcd ⁡ ( a , b ) d \gcd(a,b)d gcd(a,b)d&#xf…...

学习笔记——《Java面向对象程序设计》-抽象和接口

参考教材&#xff1a; Java面向对象程序设计&#xff08;第3版&#xff09;微课视频版 清华大学出版社 抽象方法 抽象方法是使用abstract关键字修饰的成员方法&#xff0c;抽象方法在定义时不需要实现方法体。 抽象方法的定义格式如下&#xff1a; abstract void 方法名称…...

MySQL中根据binlog日志进行恢复

MySQL中根据binlog日志进行恢复 排查 MySQL 的 binlog 日志问题及根据 binlog 日志进行恢复的方法一、引言二、排查 MySQL 的 binlog 日志问题&#xff08;一&#xff09;确认 binlog 是否开启&#xff08;二&#xff09;查找 binlog 文件位置和文件名模式&#xff08;三&#…...

数据库sql语句 中 GROUP BY 关键字详解及字段要求

GROUP BY 关键字详解及字段要求 GROUP BY 的核心作用 将查询结果按指定字段分组&#xff0c;常与聚合函数&#xff08;如 COUNT, SUM, AVG 等&#xff09;结合使用&#xff0c;对分组后的数据进行统计计算。 GROUP BY 后字段的要求 非聚合字段必须出现在 GROUP BY 子句中&…...

数据集 | 柑橘果目标检测数据集

文章目录 一、数据集概述1.1 数据标注实例1.2 数据集技术规格 二、样本类别详解2.1 树上柑橘样本2.2 树下柑橘样本 三、标注工具四、数据下载地址 一、数据集概述 在农业智能化领域&#xff0c;柑橘果园的自动化监测与管理一直面临着几个关键挑战&#xff1a; 果实定位准确性…...

Arduino示例代码讲解:Project 11 - Crystal Ball 水晶球

Arduino示例代码讲解:Project 11 - Crystal Ball 水晶球 Project 11 - Crystal Ball 水晶球程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数读取倾斜开关状态:检测状态变化:保存状态:运行过程注意事项Project 11 - Crystal Ball 水晶球 /…...

Redis—为何持久化使用子进程

AOF重写以及bgsave的时候为什么采用fork子进程而不是子线程&#xff1f; 进程间内存隔离 独立的内存空间&#xff1a;子进程拥有与主进程独立的内存空间&#xff0c;确保即使在重写过程中发生崩溃或错误&#xff0c;也不会影响主进程的运行和内存状态。 数据安全性&#xff…...

Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码

Vue3 Vite TS,使用 ExcelJS导出excel文档&#xff0c;生成水印&#xff0c;添加背景水印&#xff0c;dom转图片&#xff0c;插入图片&#xff0c;全部代码 ExcelJS生成文档并导出导出表头其他函数 生成水印设置文档的背景水印dom 转图片插入图片全部代码 ExcelJS 读取&#…...

VulnHub-DarkHole_1靶机渗透教程

VulnHub-DarkHole_1靶机渗透教程 1.靶机部署 [Onepanda] Mik1ysomething 靶机下载&#xff1a;https://download.vulnhub.com/darkhole/DarkHole.zip 直接使用VMware打开就行 导入成功&#xff0c;打开虚拟机&#xff0c;到此虚拟机部署完成&#xff01; 注意&#xff1a…...

Python设计模式:对象池

1. 什么是对象池设计模式&#xff1f; 对象池设计模式是一种创建型设计模式&#xff0c;主要用于管理和复用对象&#xff0c;以提高性能和资源利用率。它通过维护一个对象的集合&#xff08;池&#xff09;&#xff0c;来避免频繁地创建和销毁对象&#xff0c;从而减少内存分配…...

【上海大学数据库原理实验报告】MySQL数据库的C/S模式部署

实验目的 掌握Linux环境下MySQL数据库的安装、初始化和基本配置。通过配置MySQL的网络通信&#xff0c;熟悉数据库的远程访问机制及其安全性要求。 实验内容 在腾讯云上租借两台服务器&#xff0c;打开3306端口以允许MySQL远程访问。 图 1 租到的服务器可在控制台观察其状态…...

deepseek快速生成简历

目录 一、需求二、模板例子 三、生成简历四、其他说明 一、需求 现在我准备跳槽到一家公司&#xff0c;这家公司已经发布了招聘需求&#xff0c;现在你想跳槽到这家公司&#xff0c;我们可以利用deepseek快速生成符合这家公司的简历内容。 二、模板 我们要进行指令明确的结构…...

什么是机器视觉3D无序堆叠抓取

机器视觉3D无序堆叠抓取是一种结合三维视觉感知、人工智能算法和机器人控制的技术,旨在从杂乱无序堆叠的物体中识别、定位并抓取目标物体。该技术广泛应用于工业自动化(如物流分拣、装配制造)、仓储管理、食品加工等领域,解决了传统二维视觉或固定规则堆叠场景下的抓取难题…...

Shell脚本中的字符串截取和规则变化

文章目录 前言if通配符判断if判断多个条件规则变化字符串的两个示例改变中间段数字改变末尾段数字 总结 前言 科技的发展会带来习惯的改变&#xff0c;特别是对于我们这批敲代码的&#xff0c;之前还积累一些奇巧淫技&#xff0c;想着在必要的时候卖弄一下&#xff0c;自从生成…...

云账号安全事件应急响应指南:应对来自中国IP的异常访问

在当今数字化时代,云服务已成为企业IT基础设施的核心。然而,随之而来的安全挑战也日益突出。本文将详细介绍当发现云账号被来自中国的IP地址异常利用时,应如何快速有效地响应,以确保账户安全并最小化潜在风险。 1. 确认异常活动 首先,我们需要确认是否真的发生了安全事件…...

python番外

#作者&#xff1a;允砸儿 #日期&#xff1a;乙巳青蛇年 三月廿五 在开始数据库的分享之前笔者简单写以下关于python的番外。笔者这块可能写的不是很好csdn上面有很多大佬&#xff0c;笔者仅以自己的思维和想法与大家分享以下。 安装必看 笔者在这里贴一个网址https://www.…...

Jetson Orin NX 16G 配置GO1强化学习运行环境

这一次收到了Jrtson Orin NX, 可以进行部署了。上一次在nano上的失败经验 Jetson nano配置Docker和torch运行环境_jetson docker-CSDN博客 本次的目的是配置cuda-torch-python38环境离机运行策略。 Jetson Orin NX SUPER 1. 烧录镜像 参考链接在ubuntu系统中安装sdk manag…...

Embedding与向量数据库__0422

thinking&#xff1a;做一个项目 1&#xff0c;业务背景&#xff0c;价值 2&#xff0c;方法&#xff0c;工具 3&#xff0c;实践&#xff08;现有的代码&#xff0c;改写的代码&#xff09; cursor编程有个cursor settings ->privacy mode隐私模式&#xff0c;但是只要连上…...

正向代理和反向代理

正向代理和反向代理是两种在不同场景下使用的代理技术&#xff0c;它们有以下区别&#xff1a; 目标和作用 正向代理 目标 &#xff1a;主要是为客户端服务&#xff0c;帮助客户端去访问外部网络资源。例如&#xff0c;企业内部网络中的员工可能需要访问互联网&#xff0c;但直…...

Android JNI开发中头文件引入的常见问题与解决方案​,提示:file not found

Android JNI开发中头文件引入的常见问题与解决方案 问题场景&#xff08;新手易犯错误&#xff09; 假设你在开发一个JNI项目&#xff0c;想要实现一个线程安全的队列&#xff08;SafeQueue&#xff09;&#xff0c;于是直接在cpp目录下创建了safe_queue.h文件&#xff0c;并开…...

三网通电玩城平台系统结构与源码工程详解(二):Node.js 服务端核心逻辑实现

本篇文章将聚焦服务端游戏逻辑实现&#xff0c;以 Node.js Socket.io 作为主要通信与逻辑处理框架&#xff0c;展开用户登录验证、房间分配、子游戏调度与事件广播机制的剖析&#xff0c;并附上多个核心代码段。 一、服务端文件结构概览 /server/├── index.js …...

案例:Windows 作为客户端免密验证(公钥验证)

一、实验前提 1.服务器端为 Linux 系统&#xff0c;且能够正常运行相关命令和服务&#xff0c;如 systemctl、ssh 服务等。同时&#xff0c;客户端为 Windows 系统&#xff0c;且具备使用 SSH 客户端工具连接到 Linux 服务器的条件 2.Linux 服务器上已安装并配置好 SSH 服务&…...

leetcode 二分查找

704. Binary Search 代码&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int n nums.size();int left 0;int right n-1;int res -1;while(left < right){int mid (leftright)/2;if(nums[mid] target){res mid;break;}…...

C++:STL模板

STL模板分为函数模板和类模板。 我想交换两个数字&#xff0c;但是类型不同&#xff0c;例如我想交换整形a,b&#xff0c;和double类型的d1,d2。如果使用C语言来实现&#xff0c;那么需要像下面一样写两个swap函数&#xff0c;但是除了类型不同&#xff0c;其它都一样&#xf…...

NumPy入门:从数组基础到数学运算

目录 一、NumPy 数组基础 &#xff08;一&#xff09;创建数组 &#xff08;二&#xff09;数组索引 &#xff08;三&#xff09;数组切片 二、数组操作 &#xff08;一&#xff09;形状操作 &#xff08;二&#xff09;数组合并与分割 三、基本数学运算 &#xff08;…...

文档管理 Document Management

以下是关于项目管理中 文档管理 的深度解析,结合高项(如软考高级信息系统项目管理师)教材内容,系统阐述文档管理的理论框架、核心流程及实战应用: 一、文档管理的基本概念 1. 定义 文档管理是对项目全生命周期中产生的各类文档进行规范化管理的过程,包括创建、存储、版…...

TCP三次握手与四次挥手面试回答版本

面试官&#xff1a;说一下TCP三次握手的过程 参考面试回答&#xff1a; 在第一次握手的时候、客户端会随机生成初始化序号、放到TCP报文头部的序号字段中、同时把SYN标志设置为1 这样就表示SYN报文&#xff08;这里是请求报文&#xff09;。客户端将报文放入 TCP 报文首部的序…...

Windows7升级Windows10,无法在此驱动器上安装Windows

一、现象描述 台式机工作站&#xff0c;从Windows7升级Windows10&#xff0c;采用MediaCreationTool_22H2制作U盘启动盘&#xff0c;安装系统遇到问题如下&#xff1a; 二、原因分析 是由于硬盘格式不是GPT硬盘&#xff0c;而Windows系统只能安装到GPT硬盘上&#xff0c;所以…...

【阿里云大模型高级工程师ACP习题集】2.2 扩展答疑机器人的知识范围

练习题 【单选题】在RAG应用的建立索引过程中,文本向量化的主要目的是( )。 A. 将文本转换为计算机能理解的数字形式,便于比较相似度 B. 对文本进行分类 C. 去除文本中的噪声数据 D. 提取文本中的关键词 【多选题】以下属于RAG应用中建立索引步骤的有( )。 A. 文档解析 B…...

Mininet--node.py源码解析

算法逻辑详解 1. 核心类结构 代码通过面向对象的方式定义了网络模拟中的各类节点&#xff0c;继承关系如下&#xff1a; Node ├── Host │ └── CPULimitedHost ├── Switch │ ├── UserSwitch │ ├── OVSSwitch │ ├── OVSBridge │ └── IVSS…...

龙虎榜——20250422

指数目前还是震荡为主&#xff0c;等待后续的选择方向 2025年4月22日龙虎榜行业方向分析 一、核心主线方向 化工&#xff08;新材料产能优化&#xff09; • 代表标的&#xff1a;红宝丽&#xff08;环氧丙烷/锂电材料&#xff09;、亚太实业&#xff08;农药中间体&#xff…...

掌握 Altium Designer:轻松定制“交换器件”工具栏

在PCB设计过程中&#xff0c;快速交换器件&#xff08;如电阻、电容、IC等&#xff09;是提高效率的关键。Altium Designer提供了灵活的工具栏定制功能&#xff0c;让用户可以创建专属的"交换器件"工具栏&#xff0c;将常用操作集中管理&#xff0c;减少菜单切换时间…...

npm的基本使用安装所有包,安装删除指定版本的包,配置命名别名

npm的基本使用安装所有包&#xff0c;安装删除指定版本的包&#xff0c;配置命名别名 安装所有依赖指定版本安装/删除包给 npm 脚本配置“命令别名&#xff08;自定义命令&#xff09;” ✅ 一、安装所有包&#xff08;恢复依赖&#xff09; 如果项目中已经存在 package.json…...

transformer预测寿命

完整的Transformer剩余寿命预测代码体系。该代码已在锂电池和工业设备数据集验证&#xff0c;支持端到端训练和预测。 python import torch import numpy as np from torch import nn, optim from sklearn.preprocessing import MinMaxScaler from torch.utils.data import Da…...

如何将视频轻松转换为GIF动态图

在社交媒体和日常聊天中&#xff0c;GIF动态图因其体积小、循环播放的特点而广受欢迎。很多人希望将视频中的精彩片段制作成GIF图分享给朋友或用于内容创作。本文将详细介绍如何简单快速地将视频转换为GIF动态图&#xff0c;无需复杂软件&#xff0c;几步即可完成。 转换步骤 …...

一文详解Pytorch环境搭建:Mac电脑pip安装Pytorch开发环境

对于希望在本地环境中进行深度学习开发的开发者来说&#xff0c;配置PyTorch工具是至关重要的一步。。对于Mac用户而言&#xff0c;搭建PyTorch开发环境并不复杂&#xff0c;本文将详细介绍如何在Mac电脑上使用pip安装PyTorch开发环境&#xff0c;帮助开发者快速上手深度学习开…...

ios开发中xxx.debug.dylib not found

问题描述&#xff1a;error: Build input file cannot be found: /Users/zhoutao/Library/Developer/Xcode/DerivedData/XfLive-effvxneriinvzwexohdsevonmhsk/Build/Products/Debug-iphoneos/xFLive.app/xFLive.debug,dylib’, pid you forget to declare this file as an out…...

Linux嵌入式系统SQlite3数据库学习笔记

前言 SQlite3是一个轻量级、嵌入式的关系型数据库管理系统&#xff0c;其中具有的核心特点&#xff1a; 1&#xff1a;嵌入式数据库&#xff1a;无需独立服务器进程&#xff0c;数据库直接嵌入到应用程序中。 2&#xff1a;单文件存储&#xff1a;整个数据库存储为单个文件&…...

【教程】安装 iterm2 打造漂亮且高性能的 mac 终端

【教程】安装 iterm2 打造漂亮且高性能的 mac 终端_mac 安装iterm2-CSDN博客 安装myzh 参考文章&#xff1a;https://blog.csdn.net/qq_44741467/article/details/135727124 下载地址&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 1、下载到本地 2、进入下载的…...

C++IO流

CIO流 IO: 向设备输入数据和输出数据 C的IO流设备: 文件、控制台、特定的数据类型(stringstream) c中,必须通过特定的已经定义好的类, 来处理IO(输入输出) 读写文件&#xff1a;文件流 文件流: 对文件进行读写操作 头文件: <fstream> 类库: ifstream 对文件输入&am…...

Swoole-添加自定义路由实现控制器访问

swoole本身不支持路由功能&#xff0c;默认情况我们实现路由访问可能要这样 $path $request->server[request_uri]switch ($path){case /favicon.ico:$response->status(404);$response->end(Not Found);break;case /abc/def/gg:$response->end("/abc/def/gg…...

Win10 关闭自动更新、关闭自动更新并重启

Windows 专业版及企业版用户可以通过组策略禁用或延迟更新。操作步骤如下&#xff1a; 按 Win R&#xff0c;输入 gpedit.msc 打开组策略编辑器。 导航到&#xff1a;计算机配置 > 管理模板 > Windows 组件 > Windows 更新。 修改以下设置&#xff1a; • 配置自…...

鸿道Intewell操作系统助力工业机器人控制系统自主可控

工业机器人与人形机器人的爆发式增长&#xff0c;正成为东土科技鸿道Intewell系统实现跨越式发展的核心引擎。从技术适配到生态重构&#xff0c;东土科技的三大核心能力与两大机器人赛道形成深度共振&#xff0c;其市场空间和产业地位将迎来指数级跃升。 一、工业机器人&…...

第十一届机械工程、材料和自动化技术国际会议(MMEAT 2025)

重要信息 官网&#xff1a;www.mmeat.net 时间&#xff1a;2025年06月23-25日 地点&#xff1a;中国-深圳 部分展示 征稿主题 智能制造和工业自动化 复合材料与高性能材料先进制造技术 自动化机器人系统 云制造与物联网集成 精密制造技术 智能生产线优化 实时数据分析与过…...

go语言八股文

1.go语言的接口是怎么实现 接口&#xff08;interface&#xff09;是一种类型&#xff0c;它定义了一组方法的集合。任何类型只要实现了接口中定义的所有方法&#xff0c;就被认为实现了该接口。 代码的实现 package mainimport "fmt"// 定义接口 type Shape inte…...

短视频广告创意策划简历模板

模板信息 简历范文名称&#xff1a;短视频广告创意策划简历模板&#xff0c;所属行业&#xff1a;其他 | 职位&#xff0c;模板编号&#xff1a;A4I63M 专业的个人简历模板&#xff0c;逻辑清晰&#xff0c;排版简洁美观&#xff0c;让你的个人简历显得更专业&#xff0c;找到…...

2.Spring MVC与WebFlux响应式编程

目录 一、Spring MVC核心机制与工作原理 • 请求处理流程&#xff1a;DispatcherServlet分发机制、HandlerMapping与HandlerAdapter • 核心组件&#xff1a;ViewResolver、ModelAndView、拦截器&#xff08;Interceptor&#xff09; • 注解驱动开发&#xff1a;Controller、…...

【重走C++学习之路】16、AVL树

目录 一、概念 二、AVL树的模拟实现 2.1 AVL树节点定义 2.2 AVL树的基本结构 2.3 AVL树的插入 1. 插入步骤 2. 调节平衡因子 3. 旋转处理 4. 开始插入 2.4 AVL树的查找 2.5 AVL树的删除 1. 删除步骤 2. 调节平衡因子 3. 旋转处理 4. 开始删除 结语 一、概念 …...

蓝桥杯 19.合根植物

合根植物 原题目链接 题目描述 W 星球的一个种植园被分成 m n 个小格子&#xff08;东西方向 m 行&#xff0c;南北方向 n 列&#xff09;。每个格子里种了一株合根植物。 这种植物有个特点&#xff0c;它的根可能会沿着南北或东西方向伸展&#xff0c;从而与另一个格子的…...

爆改 toxml 组件 支持数据双向绑定 解决数据刷新问题

GGGGGGGGGGGGGGGGGithub地址自行研究 sbfkcel/towxml: 微信小程序HTML、Markdown渲染库https://github.com/sbfkcel/towxml原组件是以导入数据渲染信息为目的、本文以AI数据返回小程序为模拟效果演示 默认情况只在ready 环节进行渲染静态资源 1、对传入数据容器的位置做处理 …...