筛法求莫比乌斯函数
Posted gggyt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了筛法求莫比乌斯函数相关的知识,希望对你有一定的参考价值。
素数筛法
ll pri[maxn],pri_num; ll mu[maxn];//莫比乌斯函数值 bool vis[maxn]; void mobius() {//筛法求莫比乌斯函数 pri_num = 0;//素数个数 memset(vis, false, sizeof(vis)); vis[1] = true; mu[1] = 1; for(int i = 2; i <maxn; i++){ if(!vis[i]){ pri[pri_num++] = i; mu[i] = -1; } for(int j=0; j<pri_num && i*pri[j]<maxn ; j++){ vis[i*pri[j]]=true;//标记非素数 //eg:i=3,i%2,mu[3*2]=-mu[3]=1;----;i=6,i%5,mu[6*5]=-mu[6]=-1; if(i%pri[j])mu[i*pri[j]] = -mu[i]; else { mu[i*pri[j]] = 0; break; } } } }
以上是关于筛法求莫比乌斯函数的主要内容,如果未能解决你的问题,请参考以下文章