zoukankan      html  css  js  c++  java
  • 数论学习之乘法逆元

    用法:用于除法取模

    思路:扩欧

    要求:b、p互质

    设k为b的乘法逆元:

    则在求解除法取模问题时:

    有(a/b)%p =>(a*k)%p

    当b很大时,用除法会出现精度问题。。so

    乘法逆元:

    如果b*k ≡ 1 (mod p)

    则称k是b关于p的乘法逆元

    我们可以通过求 b 关于 p 的乘法逆元 k,将 a 乘上 k 再模 p,即 (a * k) mod p。其结果与(a / b) mod p等价。

    证: 
    因为 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 
    =(0 + (a / b)) mod p 
    = (a/b) mod p

    用欧几里得扩展求逆元要求 gcd(b, p) == 1

    求乘法逆元可以用到欧几里得扩展:

    void Euild(ll a, ll b, ll &x, ll &y)  // x 是 a 关于 b 的乘法逆元

    {

        if(0 == b){

            x = 1, y = 0;

            return ;

        }

        Euild(b, a%b, x, y);

        ll flag = x;

        x = y;

        y = flag - a/b * y;

    }

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/thmyl/p/7359393.html
Copyright © 2011-2022 走看看