浅谈欧拉函数

基本概念

\phi(x)表示不超过 x 且与  x  互质的数的个数,可以很容易推导得:

其中 p_{i}x 的所有质因数

它有几个性质:

\left\{\begin{matrix} \phi(1) = 1 & & x ==1\\ \phi(x) = x - 1 & & x \epsilon prime \\ \phi(n*m) = \phi(n) * \phi(m) & & gcd(n, m) == 1 \\ \end{matrix}\right.

这样我们就可以线性筛了

int prime[N], phi[N], vis[N], sz;
void get_phi(){
	vis[1] = 1; phi[1] = 1; //性质1
	for(int i = 2; i < N; i ++){
		if(!vis[i]){
			prime[++ sz] = i;
			phi[i] = i - 1; // 性质2
		}
		for(int j = 1; j <= sz && prime[j] * i < N; j ++){
			vis[prime[j] * i] = 1;
			if(i % prime[j] == 0){
				phi[i * prime[j]] = phi[i] * prime[j]; //性质4(不会告诉你还有若a为质数,b mod a=0,phi[a*b]=phi[b]*a
				break;
			}
			phi[i * prime[j]] = phi[i] * (prime[j] - 1); // 性质3 因为 phi[prime[j]] = prime[j] - 1
		}
	}
}

好了,做道练习题入门吧

https://www.luogu.org/problemnew/show/UVA11426

题解:https://blog.csdn.net/qq_38944163/article/details/83756739

posted @ 2018-11-05 20:58  lahlah  阅读(36)  评论(0编辑  收藏  举报