const int maxn=1e5+10;
int prime[maxn],cnt;
bool vis[maxn];
vector<int> f[maxn];
void get_prime_fac(){
for(int i=2;i<maxn;i++){
if(!vis[i]){
prime[cnt++]=i;
for(int j=i;j<maxn;j+=i){
f[j].push_back(i);
vis[j]=1;
}
}
}
}
也可以用莫比乌斯函数,计算所有数的素因子以及互异素因子
const int maxn=1e5+10;
int mu[maxn],cnt,prime[maxn];
bool vis[maxn];
vector<int> f[maxn];
void get_mu_fac(){
memset(vis,0,sizeof vis);
mu[1]=1;
int tot=0;
for(int i=2;i<maxn;i++){
if(!vis[i]){
prime[tot++]=i;
mu[i]=-1;
}
for(int j=0;j<tot;j++){
if(i*prime[j]>=maxn) break;
vis[i*prime[j]]=1;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
break;
}else{
mu[i*prime[j]]=-mu[i];
}
}
}
for(int i=2;i<maxn;i++){
if(mu[i]!=0){
for(int j=i;j<maxn;j+=i){
f[j].push_back(i);
}
}
}
}