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]);
    }
    
  • 相关阅读:
    【hive】null值判断
    【hive】where使用注意的问题
    【hive】关于浮点数比较的问题
    【hive】在alter修改元数据的时候报错 mismatched input 'xxxxx' expecting KW_EXCHANGE
    破解诅咒心法
    泡妞心法
    awk高级
    排除故障的总结
    机房运维相关面试题
    统计流入流出流量
  • 原文地址:https://www.cnblogs.com/lsyyy/p/11252709.html
Copyright © 2011-2022 走看看