数论模板

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;}
posted @ 2025-08-05 06:33  Wind_Leaves_ShaDow  阅读(8)  评论(0)    收藏  举报