zoukankan      html  css  js  c++  java
  • 逆元简录

    (大部分摘录
    如果 a,p不互质的话 a是没有逆元的
    1.存在唯一性
    对于 a 来说,它只会有一个,且一定有一个逆元。
    这是为什么呢?
    我们先假设 a 有两个不相等逆元: a'和 a'',
    那么一定有:

    (qquad qquad qquad qquad qquad qquad quad a*a'equiv a*a''equiv1)

    不妨设(a'<a''且 a''-a'=k),那么
    (qquad qquad qquad qquad qquad qquad ; a*(a''-k)equiv a*a'' pmod p)
    (qquad qquad qquad qquad qquad qquad ;a∗a''−a∗k≡a∗a''pmod p)
    (qquad qquad qquad qquad qquad qquad qquad a*kequiv0 pmod p)
    由于(a eq 0,所以 kequiv 0pmod p ,即 a'equiv a''),与假设矛盾,所以 a 只能有一个逆元。

    • 完全积性函数:
      两个数的逆元的积等于这两个数积的逆元
    • (a*b^{-1}equiv a/b pmod p)

    求法

    • (单个)求法一:枚举法
      枚举 kk ,检查是否满足 (a*kequiv1 pmod p)
    • (单个) 费马小定理:
      (当 p 为素数时, a^{p-1}equiv1pmod p。)
      (那么 a*a^{p-2}equiv1pmod p .)
      (x=a^{p-2})
    • (单个)求法三:扩展欧几里得
    • (批量)求法四:欧拉筛
    • (批量)求法五:线性递推

    模板->线性递推(题解有一篇证得好)

    #include<bits/stdc++.h>
    #define re return
    #define inc(i,l,r) for(int i=l;i<=r;++i)
    typedef long long ll;
    template<typename T>inline void rd(T&x)
    {
        char c;bool f=0;
        while((c=getchar())<'0'||c>'9')if(c=='-')f=1;
        x=c^48;
        while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);
        if(f)x=-x;
    }
    using namespace std;
    ll n,p,inv[3000006];
    int main()
    {
        rd(n),rd(p);
        inv[1]=1;
        printf("1
    ");
        inc(i,2,n)
            inv[i]=(p-p/i*inv[p%i]%p),printf("%d
    ",inv[i]);
    }
    
  • 相关阅读:
    SRM146 DIV1 600
    SRM145 DIV1 1000
    SRM146 DIV1 300
    SRM145 DIV1 600
    【HTML打卡】0115 margin重叠、内联元素、css控制段落
    【HTML打卡】0114 盒模型margin、border、padding
    【HTML打卡】0113 div布局,css控制
    【HTML打卡】0112-html发展、doctype声明
    Machine Learning结课感想
    【ACM打卡】ZOJ 1045 2722 2830
  • 原文地址:https://www.cnblogs.com/lsyyy/p/11252709.html
Copyright © 2011-2022 走看看