zoukankan      html  css  js  c++  java
  • 乘法逆元

    hdu5976我的博客==

    在一些题目中题目可能会要求一个乘积对MOD一个大数取余输出,给个例子hdu5976

    在这道题目中我们用到了前缀乘预处理,降低时间复杂度,但在预处理的时候,会发现可能乘积会爆long long,那么怎么办

     这时我们这么干 f[i]=(f[i-1]*i)%MOD;

    而且在这道题中,我们最后要f[i]/i*k再取余,除法取余是不好取的,乘法的话就是(a*b)%MOD==a%MOD*b%MOD;

    如果用乘法逆元就可以把除法转换成乘法,除一个数就是乘以它的逆元,但要注意我们这里逆元是相对于MOD的

    定义:
    满足b*k≡1 (mod MOD)   即b*k%MOD==1%MOD==1的k值就是b关于MOD的乘法逆元。

    证:

    根据b*k≡1 (mod p)有b*k=p*x+1。
    k=(p*x+1)/b。
    把k代入(a*k) mod p,得:
    (a*(p*x+1)/b) mod p
    =((a*p*x)/b+a/b) mod p
    =[((a*p*x)/b) mod p +(a/b)] mod p
    =[(p*(a*x)/b) mod p +(a/b)] mod p
    //p*[(a*x)/b] mod p=0

    这里的p就是MOD,直接把别人的证明搬来了==

    (a/b)%MOD==(a*k)%MOD

    可以把k看做是b在MOD环境下的倒数

    求逆元的公式

    inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD

    递推求逆元

    inv[1]=1;//1的逆元显然是1

    for(i=2;i<n;i++)

    inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD

  • 相关阅读:
    Ansible--常用模块使用(2)
    Ansible--常用模块使用
    Ansible--配置文件及系列命令
    Ansible--安装
    Ansible--原理
    MySQL高可用方案--MHA部署及故障转移
    MySQL高可用方案--MHA原理
    MySQL主从及主主环境部署
    MySQL安装之yum安装
    MySQL主从复制--原理
  • 原文地址:https://www.cnblogs.com/WHLdbk/p/6051706.html
Copyright © 2011-2022 走看看