首页 > 其他分享 >1.1.4 逆元

1.1.4 逆元

时间:2024-11-30 16:33:45浏览次数:10  
标签:1.1 cdot 逆元 equiv quad aligned mod

1.1.4 逆元

主要内容:扩欧求逆元,快速幂求逆元,线性(递归)求逆元,同余模公式(补充),反复平方法求幂(补充)

一、 逆元

首先给出逆元的定义:

$$
\begin{aligned} 假设a\cdot p &\equiv 1 \quad(mod \quad b)\\ 且(a,b)&=1\quad即\quad a,b互素\\ 则称p为a的逆元&,记作p=a^{-1} \end{aligned}
$$

用与前文类似的方法,我们将同余方程转化为二元一次不定方程:

$$
pa+qb=1
$$

则求解逆元的过程,就是对此不定方程求解的过程

二、扩欧求逆元

很明显,上面的方程是一个二元一次不定方程,我们可以使用扩欧求解

具体代码参考1.1.3 最大公约数-CSDN博客即可

三、快速幂求逆元

快速幂求逆元运用费马小定理,这要求p为素数

限于时间不足,作者将在之后的时间整理此部分内容

四、 线性(递归)求逆元

下面给出推导:

$$
\begin{aligned} 假设p&=ki+r\\ 现在尝试求i在模p下的逆元i^{-1},即有i\cdot i^{-1} &\equiv 1\quad (mod\quad p)\\ 将上述等式放在模p意义下,得到同余式:\\ k\cdot i+ r&\equiv0\quad(mod\quad p)\\ 两边同乘i^{-1},得到\\ k+r\cdot i^{-1}&\equiv 0\quad(mod\quad p)\\ 再同乘r^{-1},得到\\ k\cdot r^{-1}+i^{-1}&\equiv 0\quad(mod\quad p)\\ 即\\ i^{-1}&\equiv-k\cdot r^{-1} \quad(mod\quad p)\quad\quad\quad(*)\\ 根据定义可知,k=[\frac{p}{i}]&,r=p\%i\\ 于是,我们将一个求解i^{-1}的问题&转化为求解(p\%i)^{-1}的问题 \end{aligned}
$$

我们的算法基于(*)式得到

$$
按照(*)式,我们可以得到一个逆元的线性求法,时间复杂度为O(n),\\ 迭代方程如下:\\ inv[i] = (p - p / i) \cdot inv[p \% i] \% p;\\ 但实际上,我们可以使用递归的方法,在O(log_2n)的时间里更高效地求出逆元\\ 递归方程如下:\\ i^{-1}=\left\{ \begin{matrix} \begin{aligned} 1 \quad &i=1\\ -[\frac{p}{i}]\cdot(p\%i)^{-1} \quad &其他情况\\ \end{aligned} \end{matrix} \right.\quad\quad(mod\quad p)\\
$$

递归法代码实现如下:

int inv(int i, int p){
    if (i==1) return 1;
    return -(p/i)*inv(p%i);
}

四、 同余模公式、反复平方法求幂(补充)

同余模公式:

$$
\begin{aligned} (a+b)\%p \quad &= \quad (a\%p + b\%p) \%p\\ (a\cdot b)\%p \quad &= \quad (a\%p \cdot b\%p) \%p \end{aligned}
$$

反复平方法求幂:

这是快速幂取模的主要算法思想,想了解该算法的同学可以参照0x01 位运算(1)-CSDN博客

(如果没记错的话,笔者年幼时曾阅读《幻想数学大战》,在书中接触过类似的思想,该思想源于文中所谓的《阿梅斯草纸书》。

笔者尝试继续追溯,其可能对应史料《阿默斯纸草书》,也即《莱因德纸草书》)

本文由“小苏打NaHCO3”原创,未经允许,严禁转载!

如果觉得本文对你有用,不妨点赞收藏一下吧!

标签:1.1,cdot,逆元,equiv,quad,aligned,mod
From: https://blog.csdn.net/qq_43667525/article/details/144156784

相关文章

  • TinyPro Vue v1.1.0 正式发布:增加细粒度权限管理、页签模式、多级菜单,支持 Webpack/Vi
    你好,我是Kagol,个人公众号:前端开源星球。视频教程:https://www.bilibili.com/video/BV1SUBRYGECg/为了提升前端开发效率,OpenTiny提供了一个跨平台的前端工程化CLI工具TinyCLI,为开发者提供一系列开发套件及工程插件,覆盖前端开发的整个链路,保证团队开发过程的一致性和可复制性......
  • Vulnhub sick0s1.1
    0x01:端口扫描主机发现nmap-sn192.168.231.0/24全端口扫描nmap--min-rate10000-p-192.168.231.14122ssh,3128squid-http,但8080http是关闭的Squid是一个高性能的开源代理服务器软件,它支持多种协议,包括HTTP、HTTPS、FTP等。它通常用于以下几种用途:1、Web代理:作为......
  • Vulnhub WestWild1.1
    0x01:端口扫描主机发现nmap-sn192.168.231.0/24全端口扫描nmap--min-rate10000-p-192.168.231.140开了22ssh,80http,两个smb服务详细端口扫描nmap-sT-sC-sV-O--min-rate10000-p22,80,139,445192.168.231.140漏洞扫描nmap--script=vuln-p22,80,139,445......
  • JavaScript第一章,基础和语法1.1
    JavaScript概述JavaScript是一种轻量级、解释型、或即时编译型的编程语言,它最初由BrendanEich在1995年开发,作为浏览器的一部分,用于在网页上实现动态内容和交互功能。如今,JavaScript已经成为前端开发的核心语言之一,并且随着Node.js的出现,它还可以在服务器端运行。Ja......
  • JavaScript第二章,局部变量和全局变量,作用域,闭包1.1
    1.局部变量和全局变量全局变量:在函数外部声明的变量或在任何地方未使用var、let或const关键字声明的变量(这会导致隐式全局变量)都是全局变量。全局变量在整个脚本中都是可访问的。局部变量:在函数内部使用var、let或const关键字声明的变量是局部变量。它们只能在声明它们的函......
  • 升级部署openssl 1.1.1
    环境:OS:Centos7说明:当前已经升级了openssh的情况下进行升级openssl[root@node2Python-3.12.7]#ssh-VOpenSSH_9.8p1,OpenSSL1.1.1w11Sep2023我之前安装的openssl比较新的版本,比如3.0.14,在编译安装python3.12的时候一直报错误:Couldnotbuildthesslmodule!Pyth......
  • 11.15日报
    今天完成人机交互部分实验,完成了添加教师的板块,以下为代码:namespacetest1{partialclassaddteacForm{///<summary>///Requireddesignervariable.///</summary>privateSystem.ComponentModel.IContainercomponents=nu......
  • 11.18日报
    今天完成了设计模式实验十六,以下为今日实验内容:实验16:命令模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。     [实验任务一]:多次撤销和重复的命令模式某系统需要提供......
  • 11.11日报
    今天完成了设计模式的实验十四,以下为实验内容:实验14:代理模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解代理模式的动机,掌握该模式的结构;2、能够利用代理模式解决实际问题。     [实验任务一]:婚介所婚介所其实就是找对象的一个代理,请仿......
  • 2024.11.16 test
    B有三种比赛的场地,每种场地都给出选手能力的排名,每次交换两个人在某个场地的排名,或者查询某个人是否有安排比赛的方法使得他赢得比赛,即其他所有人都被某个没有被还击败的人击败过。考虑转化为图论,一个场地能力能力排\(i\)的向\(i+1\)建边,那么问题就变成了\(x\)出发能否遍......