zoukankan      html  css  js  c++  java
  • 欧拉函数

    尝试凭记忆写一下……
    如无特殊说明,本文 (p) 均为质数。


    传统艺能之基本计算式:

    [varphi(n)=nprod_{pmid n}(1-frac{1}{p}) ]

    并且是一个喜闻乐见的积性函数。
    根据定义可知 (varphi(p)=p-1)
    于是有如下推论:
    1.(forall n>1)(1sim n) 中与 (n) 互质的数之和为 (dfrac{nvarphi(n)}{2})
    很好证欸……因为 (gcd(n,x)=gcd(n,n-x)),所以 (1sim n) 中不互质的数总是成对出现,而这些的总和即为 (dfrac{n(n-varphi(n))}{2}),用总和一减立得。

    2.如果 (pmid n,p^2mid n),则 (varphi(n)=pvarphi(n/p))
    (n/p)(p) 有相同的质因子,将两边按计算式展开再除过去就得到啦。

    3.如果 (pmid n,p^2 mid n),则 (varphi(n)=(p-1)varphi(n/p))。(积性函数定义,把 (n) 拆成 (n/p imes p) 就行辣

    4.(sumlimits_{d|n}varphi(d)=n)
    有点意思,记 (f(n)=sumlimits_{d|n}varphi(d)),若 (gcd(n,m)=1),则

    [f(mn)=sum_{dmid mn}varphi(d)=left(sum_{dmid n}varphi(d) ight)left(sum_{dmid m}varphi(d) ight)=f(m)f(n) ]

    积性函数??好,继续有

    [f(n)=prod_{pmid n}f(p^c) ]

    其中 (c) 为对应质因子的最高次数。
    考虑单个 (f(p^c)) 怎么求。写开的话,就是

    [f(p^c)=sum_{d|p^c}varphi(d)=sum^{c}_{i=0}varphi(p^i)=1+(1-frac{1}{p})sum^{c}_{i=1}p^i ]

    发现后方是个等比数列,用公式日一下最后答案就是 (p^c)。因此

    [f(n)=prod_{pmid n}p^c=n ]

    UPD:更新一个欧拉定理的推论。
    5.欧拉定理:若 (aot n),则 (a^{varphi(n)}equiv 1pmod n)
    欧拉定理推论:

    [a^bequiv egin{cases} a^{bmodvarphi(m)}&aot m\ a^b&b<varphi(m)\ a^{bmodvarphi(m)+varphi(m)}&bgeq varphi(m) end{cases}pmod m ]

    上述证明需用到指数循环节的知识,略去。


    理论说完了,考虑这东西怎么线性筛。
    直接上代码吧:

    for(int i=2;i<=n;++i)
    {
        if(!v[i]) p[++cnt]=i,phi[i]=i-1;
        for(int j=1;j<=cnt&&i*p[j]<=n;++j)
        {
            v[i*p[j]]=1;
            if(i%p[j]==0) {phi[i*p[j]]=p[j]*phi[i];break;}
            phi[i*p[j]]=(p[j]-1)*phi[i];
        }
    }
    

    过年力……

  • 相关阅读:
    实习感悟——从用户中来,到用户中去
    FineUI PK DWZ
    Java入门到精通——工具篇之Maven概述
    信息论的熵
    菜鸟学习Hibernate——一对多关系映射
    StyleCop学习笔记——默认的规则
    StyleCop学习笔记——自定义规则
    StyleCop学习笔记——初识StyleCop
    好博客收藏
    菜鸟学习Hibernate——简单的增、删、改、查操作
  • 原文地址:https://www.cnblogs.com/wzzyr24/p/12231490.html
Copyright © 2011-2022 走看看