线性筛法求解积性函数(莫比乌斯函数)

来源:互联网 发布:java三大框架要学多久 编辑:程序博客网 时间:2024/06/05 12:45

莫比乌斯函数μ

μ(n)=1n=1(1)kn=p1p2pk0

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define mem(a,b) memset(a,b,sizeof(a))#define lson rt<<1#define rson rt<<1|1using namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const double eps=1e-10;const int MAXN=1e6+5;const int MOD=1e9+7;bool check[MAXN];int prime[MAXN];int mu[MAXN];void Mobius(){    memset(check,false,sizeof(check));    mu[1]=1;    int tot=0;    for(int i=2;i<=MAXN;i++)    {        if(!check[i])        {            prime[tot++]=i;            mu[i]=-1;        }        for(int j=0;j<tot;j++)        {            if(i*prime[j]>MAXN) break;            check[i*prime[j]]=true;            if(i%prime[j]==0)            {                mu[i*prime[j]]=0;                break;            }            else            {                mu[i*prime[j]]=-mu[i];            }        }    }}int main(){    Mobius();    for(int i=1;i<=100;++i)    {        cout<<i<<": "<<mu[i]<<endl;    }    return 0;}
原创粉丝点击