线性筛——莫比乌斯函数

如果不会线性筛素数的话,建议先看这篇博客了解一下线性筛素数。
莫比乌斯函数函数(积性函数都可以线性筛)主要是在线性筛素数的基础上得到的

我们知道:
n=i=1npitin=\prod_{i=1}^n p_i^{t_i}

μ(n)={(1)kk=i=1ntiandmax(t1,t2, ,tn)10othersμ(n)=\begin{cases} (-1)^k &k=\sum_{i=1}^n t_i \quad and\quad \max(t_1,t_2,\cdots,t_n)\leq1\\ 0 & others \end{cases}

所以:
1、当 nn 是质数时,μ(n)=1μ(n)=-1
对于 2和3 设 d=npd=\frac{n}{p} 其中 ppnn 的最小质因子
2、当 ppdd 的某个质因子时, 则 μ(n)=0μ(n)=0
3、当 ppdd 互质时,μ(n)=μ(d)μ(n)=-μ(d)

good luck and have fun!!!
附上代码:

int mu[MAXN];
void Mobius(int n)
{
	memset(vis,0,sizeof(vis));
	mu[1]=1;
	prime[0]=0;
	for(int i=2;i<=n;i++)
	{
		if(!vis[i])
		{
			prime[++prime[0]]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=prime[0]&&i<=n/prime[j];j++)
		{
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)
			{
				mu[i*prime[j]]=0;
				break;
			}
			mu[i*prime[j]]=-mu[i];
		}
	}
}
posted @ 2019-01-23 22:20  BNUbeginner  阅读(173)  评论(0)    收藏  举报