求单个数的欧拉函数值
int euler_phi (int n) {
int res = n;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
res = res / i * (i - 1);
for (; n % i ==0; n /= i);
}
}
if (n != 1) {
res = res / n * (n - 1);
}
return res;
}
生成欧拉函数表
#include <cstdio>
const int MAX_N = 100;
void euler_phi (int euler[]) {
for (int i = 0; i < MAX_N; i++) {
euler[i] = i;
}
for (int i = 2; i < MAX_N; i++) {
if (euler[i] == i) {
for (int j = i; j < MAX_N; j += i) {
euler[j] = euler[j] / i * (i - 1);
}
}
}
}
int main () {
int euler[MAX_N];
euler_phi (euler);
for (int i = 0; i < MAX_N; i++) {
printf ("%d ", euler[i]);
}
return 0;
}