欧拉函数

尝试凭记忆写一下……
如无特殊说明,本文 (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];
    }
}

过年力……

原文地址:https://www.cnblogs.com/wzzyr24/p/12231490.html