欧拉函数

欧拉函数

  与\(n\)互质的数的个数,记作\(\varphi(n)\)

  这个函数的求解:\(\varphi(n)=n\prod_{p_i}(1-\frac{1}{p_i})\),其中\(p_i\)\(n\)质因子

  \(Proof\)

\[用容斥 \]

\[\varphi(n)=n-\frac{n}{p_1}-\frac{n}{p_2}-\dotsb+\frac{n}{p_1p_2}+\frac{n}{p_1p_3}-\dotsb\frac{n}{p_1p_2p_3}-\dotsb \]

\[(显然这里所有的除法均能整除) \]

\[提出其中一个素因子: \]

\[\begin{aligned} \varphi(n)&=n[(1-\frac{1}{p_1}-\frac{1}{p_2}\dotsb-\frac{1}{p_{s-1}}+\frac{1}{p_1p_2}+\frac{1}{p_1p_3}+\dotsb)-\frac{1}{p_s}(1-\frac{1}{p_1}-\frac{1}{p_2}\dotsb-\frac{1}{p_{s-1}}+\frac{1}{p_1p_2}+\frac{1}{p_1p_3}+\dotsb)]\\ &=n(1-\frac{1}{p_s})(1-\frac{1}{p_1}-\frac{1}{p_2}\dotsb-\frac{1}{p_{s-1}}+\frac{1}{p_1p_2}+\frac{1}{p_1p_3}+\dotsb)\\ &=\dotsb \\ &=n\prod_{p_i}(1-\frac{1}{p_i}) \end{aligned} \]

  解释下:就是每次在容斥的式子里面提出一个素因子,剩下的因式与没有该素因子的式子一样,可以合并,于是命题得证。

  由此,我们看出\(\varphi(n)\)积性函数,可以用线性筛求解。

int p[maxn], check[maxn], phi[maxn];
void init(int N) {
    check[1] = 1; phi[1] = 1;
    rep(i, 2, N) {
        if (!check[i]) { p[++p[0]] = i, phi[i] = i-1; }
        for (int j = 1; j <= p[0] && i*p[j] <= N; j++) {
            check[i*p[j]] = 1;
            if (!(p[j] % i)) {
                phi[i*p[j]] = phi[i]*p[j]; // 不互质
                break;
            }
            phi[i*p[j]] = phi[i]*(p[j]-1); // 互质
        }
    }
}

   当\(n>2\)时,互质的数是成对出现的,若\((n,m)=1\),则\((n,n-m)=1\),显然\(m\neq n-m\),这一有用的性质可以证明:所有与\(n\)互质的数的和为\(\frac{n\varphi(n)}{2}\)\(n\leq 2\)时特殊代入一下即可。

posted @ 2020-04-11 17:09  AC-Evil  阅读(210)  评论(0编辑  收藏  举报