欧拉函数

欧拉函数

定义:

\[\varphi(N) = \prod_{p | N} {(1 - \frac{1}{p})} \]

扩展欧拉定理

\[a^{b} = \begin{cases} a^{b \% \varphi(p)} \qquad gcd(a, p) = 1 \\ a^{b} \qquad \quad \ \ \ \ \! gcd(a, p) \neq 1, b < \varphi(p) & (mod \ p) \\ a^{b \% \varphi(p) + p} \quad gcd(a, p) \neq 1, b \ge \varphi(p) \end{cases} \]

扩展欧拉定理一般用于不可解高次同余方程降次。如 \(2^{2^{2^{...}}} \pmod{p}\)

线性筛

线性筛筛素数的思想同样能运用到筛欧拉函数,与此同时,也能用于筛约数个数、约数和等。

int euler() {
    for (int i = 2; i <= n; ++i) {
        if (!v[i])
            v[i] = i, prime[++total] = i, phi[i] = i - 1;
        for (int j = 1; j <= total && i * prime[j] <= n; ++j) {
            if (prime[j] > v[i])
                break;
            v[i * prime[j]] = prime[j];
            phi[i * prime[j]] = phi[i] * (i % prime[j] ? prime[j] - 1 : prime[j]);
        }
    }
}
posted @ 2018-10-02 21:00  Essein  阅读(173)  评论(0)    收藏  举报