zoukankan      html  css  js  c++  java
  • O(N)求出1~n逆元

    这是一个黑科技。
    可以将某些题目硬生生地压到O(N)
    不过这求的是1~n的逆元,多了不行……


    结论

    接下来放式子:

    inv[i]=(M-M/i)*inv[M%i]%M;
    

    用数学方法来表示:
    i1=(MMi)(Mmod  i)1mod  Mi^{-1}=left(M-lfloorfrac{M}{i} floor ight)left(Mmod i ight)^{-1}mod M


    证明

    k=Mik=lfloorfrac{M}{i} floorr=Mmod  ir=M mod i
    ik+r0(mod  M)ikr(mod  M) herefore ik+r equiv 0 left(mod M ight) \ herefore -ik equiv r left(mod M ight)
    两边同时除以irir
    kr1ii1(mod  M)ii1=kr1mod  M-k*r^{-1} equiv i^{i-1} left(mod M ight) \ herefore i^{i-1}=-k*r^{-1} mod M

    i1=(MMi)(Mmod  i)1mod  Mi^{-1}=left(M-lfloorfrac{M}{i} floor ight)left(Mmod i ight)^{-1}mod M

  • 相关阅读:
    【原】git常见用法
    【转】EDID的简介和解析
    rsa公钥和私钥的生成
    往redis中存储数据是利用pipeline方法
    对于接口文档个的说明内容包括哪些
    blueprint的使用
    flask中如何生成迁移文件
    flask中自定义过滤器
    jsonify
    flask自定义处理错误方法
  • 原文地址:https://www.cnblogs.com/jz-597/p/11145274.html
Copyright © 2011-2022 走看看