首先是求逆元,exgcd的就不在这里说了
ll get_inv(ll n,ll p){
inv[1]=1;
for (int i=2;i<=n;i++){
inv[i]=(ll)(p-p/i)*inv[p%i]%p;
}
}
貌似这个常用
反推
inv[300000]= powmod (c[300000],mod-2);
for (ll i=300000-1;i>=1;i--){
inv[i] =inv[i+1]*(i+1)%mod;
}
组合数取膜
先预处理c[n],即n的阶乘
ll C(ll n,ll m){
if (m==0 || m==n) return 1;
return (c[n]*inv[m]%mod)*inv[n-m]%mod;
}
莫比乌斯反演不放了
这个
for (int i=1;i<=m;i++){
for (int j=i*2;j<=m;j+=i){
sum[i]+=sum[j];
}
}
不解释了,素数筛的思想,复杂度大概o(nlogn)
然后还有个叫除法分块前缀和这样的东西,先整理到这,待续