码迷,mamicode.com
首页 > 其他好文 > 详细

筛法求莫比乌斯函数

时间:2017-11-13 23:17:11      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:++   oid   i++   memset   div   break   for   bsp   else   

  素数筛法

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;
            }

        }
    }
}

 

筛法求莫比乌斯函数

标签:++   oid   i++   memset   div   break   for   bsp   else   

原文地址:http://www.cnblogs.com/gggyt/p/7828384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!