定义:
首先说一下定义吧,φφφ (n) 表示从 nnn 与 xxx 互质的数的个数。其中 x∈[1,n]x \in [1, n]x∈[1,n]。
初始值:φ(n)=nφ (n) = nφ(n)=n
公式:
φ(n)=φ(n)÷x×(x−1)φ (n) = φ (n) \div x \times (x - 1)φ(n)=φ(n)÷x×(x−1),其中 xxx 满足是 nnn 的质因数。
代码实现
下面是用埃氏筛实现的欧拉函数,复杂度是 O(n×loglogn)O(n \times \log \log n)O(n×loglogn),可以用线性筛优化到 O(n)O(n)O(n)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
bool st[N];
int phi[N];
int main() {
ios::sync_with_stdio(false), cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
phi[i] = i; // 初始化
}
for (int i = 2; i <= n; i++) {
if (phi[i] == i) { // 素数的情况
for (int j = i; j <= n; j += i) {
phi[j] = phi[j] * (i - 1) / i;
}
}
}
cout << phi[n] << "\n";
return 0;
}
本文介绍了欧拉函数φ(n)的概念,其表示n与x互质的数的个数,重点讲解了欧拉函数的计算公式,并提供了使用埃氏筛进行高效计算的C++代码示例,指出原始实现的时间复杂度和优化后的线性筛版本。
1657





