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