【模板】欧拉函数
题意简述
给定一个n,求gcd(n, x) = 1(x <= n)的个数
题解思路
1.通式:\(\varphi(x) = x\displaystyle\prod_{i=1}^{n}(1 - \frac{1}{pi})\) 其中p1, p2……pn为x的所有质因数,x是不为0的整数。(求单个数的欧拉函数)
2.对于每个质数p,x为它的倍数,\(\varphi(x) = \varphi(x) / p * (p - 1)\)。
代码
#include <cstdio>
using namespace std;
int n, ans;
int phi[41000];
int main()
{
scanf("%d", &n);
for (register int i = 1; i <= n; ++i) phi[i] = i;
for (register int i = 2; i <= n; ++i)
if (phi[i] == i)
for (register int j = 1; i * j <= n; ++j)
phi[i * j] = phi[i * j] / i * (i - 1);
printf("%d\n", phi[n]);
}