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