int idx;
int phi[N];
bool vis[N];
int prime[N];
void initEuler(const int n) {
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (!vis[i]) {
phi[i] = i - 1;
prime[++idx] = i;
}
for (int j = 1; j <= idx && i <= n / prime[j]; j++) {
int p = prime[j];
vis[i * p] = true;
if (i % p == 0) {
phi[i * p] = phi[i] * p;
break;
}
phi[i * p] = phi[i] * (p - 1);
}
}
}
模板——线性筛欧拉函数
最新推荐文章于 2024-02-25 10:50:53 发布