#include<bits/stdc++.h>
#define endl '\n'
#define int int64_t
using namespace std;
const int N = 1e6 + 5;
int p[N], cnt,n,vis[N];
int g[N], f[N];//g是最小质因子的多项式和 p^0 + p^1 + ... f是约数和
void get_prime() {
g[1] = f[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!vis[i]) {
p[cnt++] = i;
g[i] = f[i] = 1 + i;
}
for (int j = 0; p[j] <= n / i; ++j) {
int m = i * p[j];
vis[m] = 1;
if (i % p[j] == 0) {
g[m] = g[i] * p[j] + 1;
f[m] = f[i] / g[i] * g[m];
break;
}
else {
g[m] = 1 + p[j];
f[m] = g[m] * f[i];
}
}
}
}
筛法求约数和
于 2023-10-28 14:15:21 首次发布