写模板-质数的简单应用
1 范围内,每个数的质数及其出现次数
2 单个数的因子
3 单个数的因子数量
vector<vector<pair<int, int>>> prime_range;
void sieveRangePrimes(int x = 1e7){
prime_range.resize(x + 1);
for (int i = 2; i <= x; ++i){
if (prime_range[i].empty()){
for (int j = i; j <= x; j +=i){
int cnt = 0;
int t = j;
while (j % i == 0){
j /= i;
cnt ++;
}
prime_range[j].emplace_back(i, cnt);
}
}
}
}
vector<int> getDivisors(int x){
vector<int> res;
for (int i = 1; i <= x / i; ++i){
if (x % i == 0){
res.push_back(i);
if (i != x / i){
res.push_back(x / i);
}
}
}
return res;
}
int countDivisors(int x){
int ans = 1;
for (const auto& prime : prime_values){
if (1ll * prime * prime > x){
break;
}
int power = 0;
while (x % prime == 0){
power ++;
x /= prime;
}
ans *= power + 1;
}
return ans * (1 + (x > 1));
}

浙公网安备 33010602011771号