【模板】欧拉函数

题意简述

给定一个n,求gcd(n, x) = 1(x <= n)的个数

题解思路

1.通式:(varphi(x) = xdisplaystyleprod_{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
", phi[n]);
}
原文地址:https://www.cnblogs.com/xuyixuan/p/9600276.html