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

    逆元的定义:

    (在维基百科中也叫倒数,当然是 mod p后的,其实就是倒数不是吗?):

    如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x。

    知道逆元怎么算之后,那么乘法逆元有什么用呢?

    做题时如果结果过大一般都会让你模一个数,确保结果不是很大,而这个数一般是1e9+7,而且这个数又是个素数,加减乘与模运算的顺序交换不会影响结果,但是除法不行。有的题目要求结果mod一个大质数,如果原本的结果中有除法,比如除以a,那就可以乘以a的逆元替代。(除一个数等于乘它的倒数,虽然这里的逆元不完全是倒数,但可以这么理解,毕竟乘法逆元就是倒数的扩展)。

    费马定理  但是只能算一个:

    ll fpm(ll x, ll power, ll mod) {
        x %= mod;
        ll ans = 1;
        for (; power; power >>= 1, (x *= x) %= mod)
            if(power & 1) (ans *= x) %= mod;
        return ans;
    }
    int main() {
        ll x = fpm(a, p - 2, p); //x为a在mod p意义下的逆元
    }
    View Code

    筛法:

    int main(){
        n=read();p=read();inv[1]=1;
        for(int i=2;i<=n;i++){
            inv[i]=(ll)(p-p/i)*inv[p%i]%p;
        }
    }
  • 相关阅读:
    课堂练习四
    手头软件产品的评价
    学习进度条十
    典型用户和用户场景描述
    学习进度条九
    学习进度条八
    冲刺第十天
    冲刺第九天
    冲刺第八天
    冲刺第七天
  • 原文地址:https://www.cnblogs.com/bxd123/p/10920856.html
Copyright © 2011-2022 走看看