乘法逆元模板

Posted peter0701

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乘法逆元模板相关的知识,希望对你有一定的参考价值。

单个数O(logmod)求逆元

$View$ $Code$

const int mod=998244353;
inline long long qpow(long long a,long long b)
{
    long long ans=1;
    while(b)
    {
        if(b&1)
            ans=ans*a%mod;
        a=a*a%mod;
        b/=2;
    }
    return ans%mod;
}
long long calcinv(long long x)
{
    return qpow(x,mod-2);
}

O(n)求1~n的逆元(线性逆元)

(View) (Code)

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    int ret=0,f=1;
    char ch=getchar();
    while('9'<ch||ch<'0')
    {
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while('0'<=ch&&ch<='9')
    {
        ret=(ret<<1)+(ret<<3)+ch-'0';
        ch=getchar();
    }
    return ret*f;
}
int n,p;
long long inv[3000005];
int main()
{
    n=read();
    p=read();
    inv[1]=1;
    for(register int i=2;i<=n;i++)
        inv[i]=1ll*(p-p/i)*inv[p%i]%p;
    for(register int i=1;i<=n;i++)
        printf("%lld
",inv[i]);
    return 0;
}

O(n)求1~n的阶乘的逆元(阶乘逆元)

$View$ $Code$

const int mod=998244353;
int maxn;
long long ans,fac[100005],inv[100005];
inline void pre()
{
    fac[1]=1;
    inv[0]=1;
    for(register int i=2;i<=maxn;i++)
    {
        fac[i]=fac[i-1]*i%mod;
    }
    inv[maxn]=qpow(fac[maxn],mod-2,mod);
    for(register int i=maxn;i;i--)
    {
        inv[i-1]=inv[i]*i%mod;
    }
}

以上是关于乘法逆元模板的主要内容,如果未能解决你的问题,请参考以下文章

乘法逆元(模板)

P3811 模板乘法逆元

洛谷 P3811 模板乘法逆元 如题

模板乘法逆元

T106021 模板乘法逆元(快速幂)

乘法逆元模板