首页 > 其他分享 >三种求逆元方法小结

三种求逆元方法小结

时间:2024-11-25 20:00:03浏览次数:6  
标签:fine inv times 逆元 三种 jc 小结 mod

逆元(自学内容)

define:若ax≡1 mod f, 则称a关于1模f的乘法逆元为x。也可表示为ax≡1(mod f)。
当a与f互素时,a关于模f的乘法逆元有解。
如果不互素,通过公式‘a/b mod p = (a mod (b·p))/b’来转化
计算逆元方式:(条件a,p互质)

  1. 费马小定理( a\(^{p-1}\)≡1(mod p))(a,p互质时,\(a^{fine(p)} = 1 (mod p))\)
    变形为a * a\(^{p-2}\)≡1(mod p)
    因为逆元x定义为a*x≡1(mod p),
    所以x=a\(^{p-2}\) (mod p)(可用快速幂求)

证明费马小定理:数学归纳法
\((x + 1)^p = x^p + 1\) (mod p)
证明2:a^fine(p)
{x1,x2,x3……\(x_{fine(p)}\)} <=> {ax1,ax2,……\(a*x_{fine(P)}\)}
两边集合乘起来:
\(Πx ≡ Πx* a^{fine(p)}\) (mod p)
\(0 ≡ Πx*(a^{fine(p)} - 1)\)
∵Πx 与 p互质,∴\((a^{fine(p)} - 1)\)是p的倍数
∴$ a^{fine(p)} ≡ 1$ (mod p)

  1. 拓展欧几里得算法(exgcd)
    用于求解模数p不是质数时的逆元。
    \(ax≡1 (mod\ p)\) 可变形为 \(ax - kp = 1\)
    然后就可以用exgcd来求了。复杂度 \(O(logn)\)

  2. 阶乘逆元
    线性递推求阶乘:\(jc_i = jc_{i-1} \times i\ \%\ mod\)
    用费马小定理求 \(n!\) 的逆元 \(inv_n = qpow(n, mod-2)\)
    那么

\[jc_n \times inv_n \% mod = 1\\ jc_{n-1} \times n \times inv_{n} \% mod = 1 \\ ∴ inv_{n - 1} = inv_{n} \times n \\ \]

于是就可以递推求阶乘逆元,\(O(n)\) 预处理,\(O(1)\) 询问。

标签:fine,inv,times,逆元,三种,jc,小结,mod
From: https://www.cnblogs.com/water-flower/p/18568502

相关文章

  • Day39--自定义异常及小结
    Day39--自定义异常及小结自定义异常使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。在程序中使用自定义异常类,大体可分为以下几个步骤:创建自定义异常类。在方法中通过throw关键字抛......
  • python+Django+MySQL+echarts+bootstrap制作的教学质量评价系统,包括学生、老师、管理
    项目介绍该教学质量评价系统基于Python、Django、MySQL、ECharts和Bootstrap技术,旨在为学校或教育机构提供一个全面的教学质量评估平台。系统主要包括三种角色:学生、老师和管理员,每个角色有不同的功能权限。学生角色:学生可以通过该平台对所选课程进行评价,评价内容包括老师的......
  • 遍历 hashmap 的三种方式
    1.使用entrySet()遍历HashMap1.1概述entrySet()方法返回HashMap中所有键值对的集合。每个键值对被封装成一个Map.Entry对象。使用entrySet()可以方便地同时获取键和值,是最常用的遍历HashMap的方式之一。1.2示例代码以下是使用entrySet()遍历HashMap......
  • 学习笔记(四十三):@BuilderParam装饰器初始化组件的三种方式
    一、参数初始化组件@BuilderParam装饰的方法可以是有参数和无参数的两种形式,需与指向的@Builder方法类型匹配1、定义一个类作为参数//定义一个对象,ui需要的数据exportclassViewEntity{content:string="sssss";}2、定义一个自定义组件import{ViewEntity}from......
  • 三种排列 dp 的比较
    三种排列dp的比较Permutation有一个长为NNN的正整数排列。给定一个由<和>组成长为N−......
  • 常见排序算法总结(一) - 三种基本排序
    排序算法的稳定性稳定性是指,在算法思想不改变的前提下,能否给出一种实现,保证对任意待排序列中值相同的两个元素,在排序之后保持相对位置不变。因此稳定性是和可以和具体实现无关的,对于某一种算法,只要有不改变相对顺序的实现方案存在,它就具有稳定性。强调值相同,是因为在数值......
  • Java-三种线程的实现方式
    1.继承Thread类可以通过创建一个新的类继承Thread类,并重写其run方法来实现线程。classMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("线程运行中:"+Thread.currentThread().getName());//线程要执行的代码......
  • 深度学习入门知识点小结
    深度学习(DeepLearning)      简介:             机器学习的分支,是一种以神经网络为架构,对数据进行特征学习是算法      深度学习(DL)与机器学习(ML)的区别:             1.特征提取                  ......
  • 软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。
    编写代码完成将生成的算式及习题长期保存下来,采用CSV、XML、JSON三种形式进行存储并读取。提交相关代码及运行截图。importrandomimportcsvimportjsonimportxml.etree.ElementTreeasETfromxml.domimportminidom#生成随机算式数据defgenerate_exercises(count......
  • 缓存常用的三种读写策略
    在现代软件系统中,缓存的使用至关重要,它可以极大地提高系统的性能和响应速度。本文将详细介绍缓存常用的三种读写策略:CacheAsidePattern(旁路缓存模式)、Read/WriteThroughPattern(读写穿透)、WriteBehindPattern(异步缓存写入)。一、CacheAsidePattern(旁路缓存模式)Cac......