【模板】欧拉函数

题意简述

给定一个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]);
}
posted @ 2018-09-06 18:51  xuyixuan  阅读(130)  评论(0)    收藏  举报