码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 求逆元的3种方法(数论)(同余)


    1.线性求逆元

    假设模数为p, p = i ⋅ k + r , k , r ∈ Z , 0 ≤ r < i p=i\cdot k+r,k,r\in \Z,0\leq rp=i⋅k+r,k,r∈Z,0≤r<i

    两边同时对p取mod得: 0 ≡ i ⋅ k + r ( m o d p ) 0\equiv i\cdot k+r\pmod p 0≡i⋅k+r(modp)

    两边同时乘 i − 1 ⋅ r − 1 i^{-1}\cdot r^{-1} i−1⋅r−1,把 i − 1 i^{-1} i−1分离出来 得: 0 ≡ k ⋅ r − 1 + i − 1 ( m o d p ) 0\equiv k\cdot r^{-1}+i^{-1}\pmod p 0≡k⋅r−1+i−1(modp)

    进而 i − 1 ≡ − k ⋅ r − 1 ( m o d p ) i^{-1}\equiv -k\cdot r^{-1}\pmod p i−1≡−k⋅r−1(modp)

    回到 p = i ⋅ k + r p=i\cdot k+r p=i⋅k+r, 可以推出 k = ⌊ p / i ⌋ , r − 1 = ( p % i ) − 1 k=\lfloor p/i \rfloor, r^{-1}=(p\%i)^{-1} k=⌊p/i⌋,r−1=(p%i)−1

    代入即可: i − 1 ≡ − ⌊ p / i ⌋ ⋅ ( p % i ) − 1 ( m o d p ) i^{-1}\equiv -\lfloor p/i \rfloor\cdot (p\%i)^{-1}\pmod p i−1≡−⌊p/i⌋⋅(p%i)−1(modp)

    写成代码一句话

    inv[i]=-MOD/i*inv[MOD%i];
    inv[i]=(MOD-MOD/i)*inv[MOD%i];//更好
    
    • 1
    • 2

    预处理inv[0]=inv[1]=1就完工.

    2.费马小定理求逆元

    经典中的经典,如果 ( a , m ) = 1 (a,m)=1 (a,m)=1
    a m ≡ a ( m o d m ) a − 1 = a m − 2

    am≡a(modm)a−1=am−2" role="presentation">ama−1≡a(modm)=am−2am≡a(modm)a−1=am−2
    ama−1​≡a(modm)=am−2​

    3.exgcd求逆元

    设 x = a − 1 x=a^{-1} x=a−1,
    a x ≡ 1 ( m o d m ) ax \equiv 1 \pmod m ax≡1(modm)
    等价于
    a x + m y = 1 ax + my = 1 ax+my=1
    这样一个exgcd能解决的问题。

    实际情况下:

    exgcd(a,p,x,y);
    x=(x%m+m)%m;
    
    • 1
    • 2

    其他小技巧

    求阶乘逆元

    注意乘的是 i + 1 i+1 i+1

    fac[0]=1;for(int i=1;i<=N;i++) fac[i]=fac[i-1]*i%MOD;
    ifac[N]=qmod(fac[N], MOD-2);
    for(int i=N-1;i>=0;i--) ifac[i]=ifac[i+1]*(i+1)%MOD;
    
    • 1
    • 2
    • 3
  • 相关阅读:
    在DOS或Windows环境中,使用工具Debug
    uniapp微信小程序手机号一键登录获取手机号,获取openid
    rabbitMQ rascal/amqplib报错 Error: Unexpected close 排查
    小解C语言文件编译过程【linux】
    PCB批量制板---付费版经验
    部分地图瓦片数据源整理
    用Python操作PPT的办公自动化教程
    SpringBoot中对Spring AOP的实现
    期末前端web大作业——我的家乡陕西介绍网页制作源码HTML+CSS+JavaScript
    48.HarmonyOS鸿蒙系统 App(ArkUI)常用组件的使用
  • 原文地址:https://blog.csdn.net/A_Bright_CH/article/details/122898723
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号