//求单个
int getCnt(int m) {
set<int> mset;
int i = 2;
while (i < m)
{
if (m % i == 0)
{
mset.insert(i);
m /= i;
}
else
i++;
}
if(m > 1)mset.insert(m);
return mset.size();
}
//求多个
const int MAXN = 1e5 + 7;
int f[MAXN + 10];
void init() {
if (inited) return;
inited = true;
memset(f, 0, sizeof(f));
for (int i = 2; i <= MAXN ; i++) if (!f[i]) for (int j = i; j <= MAXN ; j += i) f[j]++;
}
//求多个总数
void init() {
for (int i = 2; i <= maxn; i++)
{
if (!f[i]) {
for (int j = i; j <= maxn; j += i){
int tmp = j;
while (tmp % i == 0){
f[j]++;
tmp /= i;
}
}
}
f[i] += f[i - 1];
}
}
1e5 所有数分解
const int maxn = 1e5;
vector<int> fac[maxn + 10];
auto init = [] {
for(int i = 2;i <= maxn;i++){
if(fac[i].empty()){
for(int j = i;j <= maxn;j+=i){
fac[j].push_back(i);
}
}
}
return 0;
}();