exgcd:
Il int exgcd(int a,int b,int &x,int &y){
if(!b){x=1,y=0;return a;}
int ret=exgcd(b,a%b,y,x);
y-=(a/b)*x;
return ret;
}
线性筛质数:
for(int i=2;i<=N;i++){
if(!nop[i])pr[++pn]=i;
for(int j=1;j<=pn&&i*pr[j]<=N;j++){nop[i*pr[j]]=1;if(!(i%pr[j]))break;}
}
线性筛莫比乌斯函数:
mu[1]=1;
for(int i=2;i<=N;i++){
if(!nop[i])pr[++pn]=i,mu[i]=-1;
for(int j=1;j<=pn&&i*pr[j]<=N;j++){
nop[i*pr[j]]=1,mu[i*pr[j]]=-mu[i];
if(!(i%pr[j])){mu[i*pr[j]]=0;break;}
}
}
线性筛欧拉函数:
eu[1]=1;
for(int i=2;i<=N;i++){
if(!nop[i])eu[i]=i-1,pr[++pn]=i;
for(int j=1;j<=pn&&i*pr[j]<=N;j++){
nop[i*pr[j]]=1,eu[i*pr[j]]=eu[i]*(i%pr[j]?eu[pr[j]]:pr[j]);
if(!(i%pr[j]))break;
}
}
数论分块:
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);
//do sth
}
gcd:
Il int gcd(int x,int y){return y?gcd(y,x%y):x;}
快速幂:
Il int qpow(int x,int y){int t=1;for(;y;y>>=1,x=x*x%mod)if(y&1)t=t*x%mod;return t;}