zoukankan      html  css  js  c++  java
  • 费马小定理+线性递推求逆元

    问题:求a/b对p的余数

    简单,我会(a%p)/(b%p)

    很遗憾,除法不满足模运算的分配律,不信你自己去试一试。

    那么就需要用到逆元了((i的逆元记作inv[i]))。

    (a*xequiv1 pmod {p},且a与p互质,那么我们就能定义: x 为 a 的逆元,记为a^{-1})

    (那么求frac{a}{b}pmod{p}也就是求 a*inv[b]pmod{p})



    Ⅰ.费马小定理求逆元

    注意,这种方法只适用于模数p为质数的时候。

    (这个定理是说a^{p-1} equiv 1 pmod{p})

    (Rrightarrow a^{p-2}equiv a^{-1} pmod{p})

    (即a^{p-2}是a在模数p下的逆元)



    Ⅱ.(问题:求1至p的所有数对p下的逆元。)

    (这个时候即使是ecgcd的O(p logp)也不让人满意,好在我们有个O(p)的线性递推算法)

    首先我们知道(1^{-1}=1(mod p),放进递推数组inv[1]=1)

    现在假设(k=p/i, r=p\%i)

    (Rrightarrow p=k*i+r)

    (Rrightarrow k*i+requiv 0 pmod{p})

    (Rrightarrow 左右乘上i^{-1}、r^{-1}得k*r^{-1}+i^{-1}equiv0 pmod{p})

    (Rrightarrow 移项得i^{-1}equiv -k*r^{-1} pmod{p})

    (也就是inv [i] = -(p/i) *inv [p\%i] (mod p))

    然后因为我们想得到正数下的逆元,所以稍微变化一下得到

    (inv [i]=(p-p/i)* inv [ p\%i ] \%p)

    就这么轻松的证完了!!!

  • 相关阅读:
    【 数据结构(C语言)】栈的应用——行编辑程序
    【 数据结构 (C语言)】栈的应用(二)——括号匹配问题
    节点
    页面加载--延迟加载
    雅黑php 探针
    Swiper 触屏滑动切换
    tab 选择悬停展示
    翻牌抽奖功能讲解
    公告信息滚动功能
    织梦提交表单不进行跳转
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12662025.html
Copyright © 2011-2022 走看看