求逆元
线性筛逆元:
inv[1]=1; for(int i=2;i<=10000008;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
求阶层的逆元
inv[maxn]=qpow(fac[maxn],mod-2);//fac[maxn]为maxn的阶层; for(ll i=maxn-1;i>=0;i--) inv[i]=(inv[i+1]*(i+1))%mod;
费马小定理:
mod为素数时,求x的逆元:
即x的(mod-2)次方
long long qpow(long long x,long long b){//b=mod-2 long long ans=1; x%=mod; while(b){ if(b&1){ ans=ans*x%mod; } x=x*x%mod; b>>=1; } return ans; }
扩展欧几里得求逆元
long long extend_gcd(long long a,long long b,long long &x,long long &y){//扩展欧几里得 if(!b){ x=1;y=1; return a; } long long r=extend_gcd(b,a%b,y,x); y-=x*(a/b); return r; } long long inv(long long a,long long mod){ long long x,y; extend_gcd(a,mod,x,y); x%=mod; if(x<0) x+mod; return x; }