【算法简介】
线性筛主要用于O(n)计算积性函数
积性函数主要有:

还有当f(x)和g(x)都是积性函数时,狄利克雷卷积也是积性函数可以进行线性筛
【素数筛】
void shai()
{
for(int i=2;i<=n;i++)
{
if(!np[i])
p[++pcnt]=i;
for(int j=1;j<=pcnt && p[j]*i<=n;j++)
{
np[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
}
【欧拉筛】
void shai()
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!np[i])
{
p[++pcnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=pcnt && p[j]*i<=n;j++)
{
np[i*p[j]]=1;
if(i%p[j]==0)
{
phi[i*p[j]]=phi[i]*p[j];
break;
}
else
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
【莫比乌斯函数筛】
void shai()
{
mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!np[i])
{
p[++pcnt]=i;
mu[i]=-1;
}
for(int j=1;j<=pcnt && p[j]*i<=n;j++)
{
np[i*p[j]]=1;
if(i%p[j]==0)
{
mu[i*p[j]]=0;
break;
}
else
mu[i*p[j]]=-mu[i];
}
}
}
这篇博客介绍了线性筛算法在计算积性函数中的应用,如欧拉函数、莫比乌斯函数等,并提供了相应的筛法实现。通过线性筛,可以在O(n)的时间复杂度内高效求解这些函数,对于理解和优化数论算法有重要意义。
1272

被折叠的 条评论
为什么被折叠?



