写模板-质数的简单应用

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 getDivisors(int x){
vector 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));
}

posted @ 2024-04-02 13:49  _Yxc  阅读(50)  评论(0)    收藏  举报