莫比乌斯的定义式
mu[x]=(-1)^k, x不含素因子平方项,k为素因子个数
=0 , 其他
1~n之间的莫比乌斯函数
#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<unordered_map>
#include<stack>
using namespace std;
int prime[100060];
int u[100060],mu[100060];
int cnt;
int genmu(int n){
fill(u,u+100060,1);
mu[1]=1;
for(int i=2;i<=n;i++){
if(u[i]==1){
prime[++cnt]=i;
mu[i]=-1;//如果为素数,素因子只有一个,=-1
}
for(int j=1;j<=cnt;j++){
if(prime[j]*i>100000)
break;
u[prime[j]*i]=0;
if(i%prime[j]){
mu[i*prime[j]]=-mu[i]; //不含,=(-1)^k,k为素因子的个数
}
else {
mu[i*prime[j]]=0;//x中含有素因子平方项
break;
}
}
}
}
int main(){
int n;
cin>>n;
genmu(n);
for(int i=1;i<=n;i++)
cout<<mu[i]<<" ";
return 0;
}