欧拉函数(详解)-数论

2023-10-30

欧拉函数:对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如euler(8)=4,因为1,3,5,7均和8互质。
Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身)。
欧拉公式的延伸:一个数的所有质因子之和是euler(n)*n/2。
欧拉定理:对于互质的正整数a和n,有aφ(n) ≡ 1 mod n。
欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。
若n是质数p的k次幂,φ(n)=pk-p(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。
特殊性质:当n为奇数时,φ(2n)=φ(n)
欧拉函数还有这样的性质:
设a为N的质因数,若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N / a) * a;若(N % a == 0 && (N / a) % a != 0) 则有:E(N) = E(N / a) * (a - 1)。
那么如何变成实现欧拉函数呢?下面通过两种不同的方法来实现。第一种方法是直接根据定义来实现,同时第一种方法也是第二种筛法的基础,当好好理解。
可以得到关于欧拉函数的递推关系:
假设素数p能整除n,那么
如果p还能整除n / p, PHI(n) = PHI(n / p) * p;
如果p不能整除n / p, PHI(n) = PHI(n / p) * (p - 1);

由对于一个正整数N的素数幂分解N=P1q1*P2q2Pn^qn.
φ(N)=N
(1-1/P1)(1-1/P2)…*(1-1/Pn).
*
可以写出以下代码:

直观代码:
int euler(int n){ //返回euler(n)   
     int res=n,a=n;  
     for(int i=2;i*i<=a;i++){  // i * i <=a ,因为在分解的时候 a也变小,所以范围也跟着变小
         while(a%i==0){  
			//因为 1-1/p = (p-1)/p .
             res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出   
              a/=i;  
         }  
     }  
     if(a>1) res=res/a*(a-1);  
     return res;  
}  

但是当求一个区间内的时候上面的方法就不行了,那么我们可以类比以下求素数的优化方法,可不可以用筛法呢?答案是可以!

比如求10以内所有数的φ值: 设一数组phi[11],赋初值phi[1]=1,phi[2]=2...phi[10]=10; 然后从2开始循环,把2的倍数的φ值*(1-1/2),则phi[2]=2*1/2=1,phi[4]=4*1/2=2,phi[6]=6*1/2=3....; 再是3,3的倍数的φ值*(1-1/3),则phi[3]=3*2/3=2,phi[6]=3*2/3=2,phi[9]=.....; 再5,再7...因为对每个素数都进行如此操作,因此任何一个n都得到了φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk)的运算

代码:

筛法求欧拉函数:
//筛选法打欧拉函数表 
#define Max 1000001
int euler[Max];
void Init(){ 
     euler[1]=1;
     for(int i=2;i<Max;i++)
       euler[i]=i;
     for(int i=2;i<Max;i++)
        if(euler[i]==i) //所以这里i这能是素数
           for(int j=i;j<Max;j+=i) //j = j+i,那么是i的倍数的数都会改变              				
           euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出 
}

也可以在筛法中进行初始化

代码:void Euler()
	{
		for (int i = 2; i < N; i++) {
			if (!phi[i])
				for (int j = i; j < N; j += i) { 
					if (!phi[j])phi[j] = j; 
					phi[j] = phi[j] / i * (i - 1);
				}
		}
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

欧拉函数(详解)-数论 的相关文章

随机推荐

  • 模拟搭建日志收集系统

    Hadoop 模拟搭建日志收集系统 一 技术点梳理 二 任务 2 1 调通单机版的thrift python版本 2 1 1 安装thrift 2 1 2 定义client和server通信的接口 2 1 3 根据接口 scheme 生成p
  • 在CXXLD libwebkitgtk-1.0.la时候发生 ld terminated with signal 9 [Killed]错误

    当时内存几乎用完了 发生这个错误是因为内存不够 编译不过来 系统是ubuntu 11 04 2G的物理内存不够 swap分区是1G CXXLD libwebkitgtk 1 0 la collect2 ld terminated with
  • 最全的搜索引擎登录入口(SEO必备)

    百度搜索网站登录口 http www baidu com search url submit html 百度单个网页提交入口 http zhanzhang baidu com sitesubmit 360搜索引擎登录入口 http info
  • sql查询中的包含【被包含】、模糊查询

    在mysql中提供了like的关键词可用于模糊查询 也可理解为某些指定字段包含在表中的的查询 select count from mysqlb client where name like 庆农 可查询出在name字段下所有包含 庆农 字样
  • maven怎么引入jdom_Maven环境配置

    1 Android Maven Plugin 参考网站 3 解压放到你想放的位置 例如 D Maven 目录 4 配置环境变量 MAVEN HOME D Maven 把MAVEN HOME加入到PATH中 MAVEN HOME bin 5
  • Unity 3D-learning 简单打飞碟游戏

    一 编写一个简单的打飞碟游戏 游戏内容要求 游戏有 n 个 round 每个 round 都包括10 次 trial 每个 trial 的飞碟的色彩 大小 发射位置 速度 角度 同时出现的个数都可能不同 它们由该 round 的 ruler
  • js多方框输入密码_简单JS代码实现输入密码访问页面

    一段js代码让你的网页拥有密码功能 访问页面必须输入密码才能正常浏览 分享三种JS代码 放在和中间即可 第一种 function password var testV 1 var pass1 prompt 请输入密码 while testV
  • 软件调试的艺术(Linux Unix平台软件调试权威著作)

    c 作 者 美 Norman Matloff Peter Jay Salzman 同作者作品 作译者介绍 译 者 张云 同译者作品 丛 书 名 图灵程序设计丛书 出 版 社 人民邮电出版社 书 号 9787115213969 上架时间 20
  • ResNet网络结构

    1 网络解决的问题 当更深的网络能够开始收敛时 一个退化问题就暴露出来了 随着网络深度的增加 精度达到饱和 然后开始退化 出乎意料的是 这种退化不是由过拟合引起的 向适当深度的模型中添加更多的层会导致更高的训练误差 经典网络的缺陷用以下图来
  • eigen(一) 简介

    一 概况 Eigen是有关线性代数 矩阵 向量等 的c 模板库 支持SSE2 3 4 ARM NEON 32 bit and 64 bit PowerPC AltiVec VSX 32 bit and 64 bit instruction
  • 【完整版代码】含分布式电源的配电网日前两阶段优化调度模型

    目录 1 主要内容 1 1 摘要 1 2 具体模型 1 3 网架结构 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序复现了 含分布式电源的配电网日前两阶段优化调度模型 孟晓丽完整模型 包括第 1 阶段为 DG 优化调度阶段和
  • 算法设计与分析复习

    文章目录 算法基本概念 算法的定义 算法好坏如何衡量 时间复杂度 算法评价 递归与分治 递归的概念 递归式解法 什么是分治法 基本策略 分治法适用情况 分治法与平衡的概念 分治法实例 快排 最小元 最大元 最近点对问题 寻找顺序统计量问题
  • 推荐几个Windows iso镜像下载的网站

    文章目录 1 微软官网 2 MSDN网站 3 系统库 xitongku 4 其他网站 最后总结 给大家推荐几个 Windows iso镜像下载网站 1 微软官网 入口地址 https www microsoft com zh cn soft
  • 查看线程的状态信息

    1 调度策略 sched h文件中定义了几种调度策略 Scheduling algorithms define SCHED OTHER 0 非实时调度 分时调度 define SCHED FIFO 1 实时调度 先到先服务 define S
  • 深度学习模型训练全流程!

    关注后 星标 Datawhale 每日干货 每月组队学习 不错过 Datawhale干货 作者 黄星源 奉现 Datawhale优秀学习者 本文从构建数据验证集 模型训练 模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解 一个
  • swap

    类的swap include
  • 毕业设计 stm32单片机的智能微波炉设计

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • 计算机毕设之Java+SpringBoot线上考试自动组卷系统-源码+数据库+文档报告

    注意 该项目只展示部分功能 如需了解 评论区咨询即可 本文目录 1 开发环境 2 系统设计 2 1 设计背景 2 2 设计内容 3 系统页面展示 3 1 前台页面 3 2 后台页面 3 3 功能展示视频 4 更多推荐 5 部分功能代码 5
  • Word文档图标变成空白如何恢复

    WPS和office冲突导致Word和Excel文件图标不见了 如下图所示 doc和 xls是低版本office的文件后缀 docx和 xlsx是高版本office的文件后缀 win r打开命令框输入regedit 找到计算机 HKEY C
  • 欧拉函数(详解)-数论

    欧拉函数 对正整数n 欧拉函数是少于或等于n的数中与n互质的数的数目 例如euler 8 4 因为1 3 5 7均和8互质 Euler函数表达通式 euler x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其