【定义】

对正整数 n,欧拉函数是小于等于 n 的数中与 n 互质的数的个数,记作:

例如:,因为 1、3、5、7 均与 8 互质。

【性质】

1)若 n 为一素数 p,则:

2)若 n 为一素数 p 的幂次 ,则:

例如:要求 ,由于 16=2*2*2*2,故 

3)若 n 为任意两个互质的数 a、b 的积,则:

例如:要求 ,由于 40=5*8,且 5、8 互质,所以 

4)设  为 正整数 n 的素数幂乘积表达式,则:

5)若 ,则:

6)若 ,则:

7)前 n 个数的欧拉函数的和为:

【求法】

1.一般方法

求一个数 x 的欧拉函数

int Euler(int x)
{int res=x;for(int i=2;i<(int)sqrt(x*1.0)+1;i++){if(x%i==0){res=res/i*(i-1);while(x%i==0)/// 保证i一定是素数x/=i;}}if(x>1)res=res/x*(x-1);return res;
}

2.递推求法

打表取 1 到 N 的所有欧拉函数并存在数组 phi 中

int phi[N];
void Euler()
{for(int i=1;i<=N;i++)phi[i]=i;for(int i=2;i<=N;i+= 2)phi[i]/=2;for(int i=3;i<=N;i+= 2){if(phi[i]==i){for(int j=i;j<=N;j+=i)phi[j]=phi[j]/i*(i-1);}}
}

3.欧拉函数线性筛法

该算法可在线性时间内筛素数的同时求出所有数的欧拉函数。

如要求一个数的欧拉函数,可以用欧拉函数性质直接求出,但是如果要求前 n 个数的欧拉函数,可采用线性时间的方法筛选欧拉函数值,完成打表。

int phi[N],prime[N];
bool vis[N];
void Euler(int n)
{  int cnt=0;phi[1]=1;for(int i=2;i<=n;i++){if(!vis[i])  {prime[++cnt]=i;//筛素数的时先判断i是否是素数  phi[i]=i-1;//当i是素数时phi[i]=i-1  }for(int j=1;j<=cnt;j++){if(i*prime[j]>n)break;vis[i*prime[j]]=1;//确定i*prime[j]不是素数if(i%prime[j]==0)//看prime[j]是否是i的约数  {  phi[i*prime[j]]=phi[i]*prime[j];break;  } else  phi[i*prime[j]]=phi[i]*(prime[j]-1);//其prime[j]-1就是phi[prime[j]],利用了欧拉函数的积性  }  }
}

【例题】

  1. Relatives(POJ-2407)(一般求法):点击这里
  2. Farey Sequence(POJ-2478)(递推求法):点击这里
  3. Visible Lattice Points(POJ-3090)(线性筛法):点击这里
  4. 小a与黄金街道(2019牛客寒假算法基础集训营 Day1-D)(一般求法+公式推导):点击这里

数论 —— 欧拉函数相关推荐

  1. hdu1395 数论 欧拉函数

    hdu1395 数论   欧拉函数 对于给出的每一个n 求最小正整数 x 满足 2^x mod n = 1 1.如果给出的n 是偶数或者 1 则一定无解 2.如果是奇数 首先根据欧拉定理 我们可知 p ...

  2. 第二十六章 数论——欧拉函数(详解与证明)

    第二十六章 数论--欧拉函数(详解与证明) 欧拉函数 1.互质 2.欧拉函数的定义 3.欧拉函数的公式 4.欧拉函数的证明 5.欧拉函数的使用 (1)问题一: 思路 代码 (2)问题二: 思路 cas ...

  3. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛

    F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...

  4. 费马定理中值定理_数论-欧拉函数、欧拉定理

    欧拉函数 积性函数 满足 ( 互质) 定义 对于正整数 ,欧拉函数是小于等于 的所有数中与 互质的数的 个数. 欧拉函数是积性函数(这个证明不是很显然,这个链接里面有很多种证明方法) 记作: 公式 , ...

  5. 中高级数论 [欧拉函数线性筛,二次剩余]

    欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...

  6. nssl1232-函数【数论,欧拉函数,莫比乌斯反演】

    正题 题目大意 ∑d∣nf(d)=n\sum_{d|n}f(d)=nd∣n∑​f(d)=n 对于n个aia_iai​ 求 ∑i=1nf(ai)\sum_{i=1}^nf(a_i)i=1∑n​f(ai​ ...

  7. [数论-欧拉函数的应用]NEFU 1115

    description 在高数课上老师给出了一个等式GCD(n-a,n)*GCD(n-b,n)=n^k; 已知,n,k,问同学们有多少组(a,b)满足这个等式.结果对10^9+7取模. 1<=a ...

  8. [HAOI2012]外星人——数论欧拉函数

    题目描述 艾利欧在她的被子上发现了一个数字 NNN,他觉得只要找出最小的 xxx 使得 φx(N)=1\varphi^x(N)=1φx(N)=1 根据这个 xxx 她就能找到曾经绑架她的外星人的线索了 ...

  9. P2303 [SDOI2012] Longge(数论/欧拉函数)

    P2303 [SDOI2012] Longge 一道看似非常基础的数论题,但是蕴含了非常多的知识,求解 ∑i=1ngcd(i,n)\sum_{i=1}^ngcd(i,n) i=1∑n​gcd(i,n) ...

最新文章

  1. CentOS7下Hadoop集群搭建
  2. 在以下说法错误的是_关于犬麻醉常见的错误认知
  3. 异常:java.lang.IllegalArgumentException: Control character in cookie value or attribute.
  4. 读《嵌入式系统项目分析入门与实践》⑤
  5. 昨天,我的大学学习[2]
  6. antd vue关闭模态对话框_Vue.extend 登录注册模态框
  7. java7新添加的一些特性--转
  8. 接口返回数据太大_Vue实战044:Mockjs模拟服务器Api接口并返回数据详解
  9. java系列:命令行启动mysql
  10. mysql交互式查询_客户机程序5―MYSQL交互式查询程序[图]_MySQL
  11. onpropertychange oninput兼容性
  12. 天使投资人如何评估创业公司价值
  13. java poi 导出excel加密
  14. 呆萌却实际可怕的动物:蛇鹫会踢腿 大熊猫攻击凶猛
  15. init函数及其使用(go语言基础语法)
  16. 共同期待 经典Q版坦克大战揭开神秘面纱
  17. C++11新特性(一)右值引用
  18. CentOS7vim修改文件/bin/bash: wq command not found问题解决
  19. 【Arduino】LCD 1602 转接板 的默认接线
  20. java使用jco连接sap调用rfc函数,环境配置+代码

热门文章

  1. JavaEE实战班第八天
  2. 2021上半年朋友圈都在传的10本书,找到了
  3. 收到字节 Offer,月薪 45k,揭秘面试流程及考点
  4. HTML5中的自定义属性总结
  5. SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
  6. ADB wifi调试步骤
  7. 复习-网络编程之IP和端口号
  8. Redis实现消息队列之生产消费模式
  9. 简述 JavaScript 作用域与词法分析
  10. Django(四)数据库