http://poj.org/problem?id=2478
求欧拉函数的模板。
初涉欧拉函数,先学一学它基本的性质。
1.欧拉函数是求小于n且和n互质(包括1)的正整数的个数。记为φ(n)。
2.欧拉定理:若a与n互质,那么有a^φ(n) ≡ 1(mod n),经常用于求幂的模。
3.若p是一个质数,那么φ(p) = p-1,注意φ(1) = 1。
4.欧拉函数是积性函数:
若m与n互质,那么φ(nm) = φ(n) * φ(m)。
若n = p^k且p为质数,那么φ(n) = p^k - p^(k-1) = p^(k-1) * (p-1)。
5.当n为奇数时,有φ(2*n) = φ(n)。
6.基于素数筛的求欧拉函数的重要依据:
设a是n的质因数,若(N%a == 0 && (N/a)%a == 0) 则 φ(N) = φ(N/a)*a; 若(N%a == 0 && (N/a)%a != 0) 则φ(N) = φ(N/a)*(a-1)。
该题就是基于性质六,在线性时间内求欧拉函数。
#include
#include
#include
#include
#include