欧拉函数学习笔记

前言

本人能力有限,有错误欢迎指出。

定义

φ(n) 表示的是小于等于 nn 互质的数的个数。

公式

n=i=1spiki,有

φ(n)=i=1sφ(piki)=i=1spikipiki1=i=1spiki(1pi1)=i=1spiki(11pi)=i=1spikii=1s(11pi)=ni=1s(11pi)

性质

  1. 欧拉函数是积性函数。具体地:
  • gcd(n,m)=1 时,φ(n×m)=φ(n)×φ(m)
  • 否则,φ(n×m)=φ(n)×m
  1. n=d|nφ(d),即 n 的因数(包括 1n)的欧拉函数之和等于 n

代码

  • 求单个 φ(n)
long long eular(long long n) {
long long ans=n;
for(int i=2;i*i<=n;i++) {
if(n%i==0) {
ans−=ans/i;
while(n%i==0)
n/=i;
}
}
if(n>1)ans−=ans/n;
return ans;
}
  • 求多个 φ(n),利用欧拉筛和性质 1
void init(){
phi[1]=1;
for(int i=2;i<=n;i++){
if(!is[i]){
pri[++tot]=i;
phi[i]=i-1;
}
for(int j=1;j<=tot&&i*pri[j]<=n;j++){
is[i*pri[j]]=1;
if(i%pri[j]==0){
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else{
phi[i*pri[j]]=phi[i]*phi[pri[j]];
}
}
}
}

习题

P2568 GCD

P2158 [SDOI2008] 仪仗队

本文作者:zhangjiting

本文链接:https://www.cnblogs.com/zhangjiting/p/18000196

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   革命军参谋长·萨博  阅读(55)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起