选自《洛谷深入浅出进阶篇》——欧拉函数+欧拉定理+扩展欧拉定理

欧拉函数:

  1. 欧拉函数定义:\psi \left ( n \right ) = 1~n中与n互质的数的个数。 比如 \psi \left ( 12 \right ) = 4    
  2. 欧拉函数是积性函数:(也就是)当 n与m互质的时候: \psi \left ( nm \right ) = \psi \left (n \right ) \psi \left(m \right )
  3. 由算术基本定理,我们可以设n=\prod_{i=1}^{m} p_{i}^{k_{i}},那么我们只要计算出\psi \left(p_{i}^{k_{i}} \right )的取值就能求出\psi \left(n \right )的取值。 下面给出证明

\psi \left(p_{i}^{k_{i}} \right )的取值怎么求? 也就是求1~p_{i}^{k_{i}}中与p_{i}^{k_{i}}互质的数的个数

我们可以求与p_{i}^{k_{i}}不互质的数的个数,由于p是质数,所以与p_{i}^{k_{i}}不互质的数一定是p的倍数

那么1~p_{i}^{k_{i}}中,p的倍数就是 \frac{p_{i}^{k_{i}}}{p}=p_{i}^{k_{i}-1}, 那么我们就知道与p_{i}^{k_{i}}不互质的数的个数 就是p_{i}^{k_{i}}-p_{i}^{k_{i}-1 }。也就是 p_{i}^{k_{i}}\left(1-\frac{1}{p} \right )

由于p_{i}^{k_{i}}之间互质,且欧拉函数是一个积性函数,那么有

\psi \left(n\right) = \prod_{i=1}^{m} \psi \left( p_{i}^{k_{i}} \right ) =\left(\prod_{i=1}^{m} p_{i}^{k_{i}} \right)\cdot \left(\prod_{i}^{m}\left(1-\frac{1}{p}\right)\right)=n\cdot \prod_{i}^{m}\left(1-\frac{1}{p} \right)

所以我们只需要求出n的所有质因子p,然后求出 1-\frac{1}{p} 的乘积即可 

phi = n;
for(int i=2 ; i*i<=n ; i++ )if( n%i == 0 ){phi = phi/i * (i-1 )   // 1- 1/p == (p-1)/p 为了防止爆int,故意不写成phi*(i-1)/iwhile ( n%i==0 ) n/=i ;}
if(n!=1) phi =phi/n *(n-1);  //防止n有一个大于 sqrt(n)的质因子的情况

以上就是试除法求欧拉函数的板子,请牢牢记住,后面回经常用到。

下面介绍筛法求欧拉函数,可以以O(n)的时间来求2~n的欧拉函数。

const int N = 1e6 + 7;
int pri[N], phi[N], flag[N];
int tot;
int main() {phi[1]=1;for (int i = 2; i <= N; i++) {if (flag[i] == 0) {pri[tot++] = i;phi[i] = i - 1;}for (int j = 0; j < tot and pri[j] * i <= N; j++) {if (i % pri[j] == 0) {phi[i * pri[j]] = pri[j] * phi[i];flag[i * pri[j]] = 1;break;}else {flag[i * pri[j]] = 1;phi[i * pri[j]] = (pri[j] - 1) * pri[i];}}}
}

下面逐步分析这个板子:

首先我们需要写出一个线性筛的板子,然后根据欧拉函数的定义填充即可:

if (flag[i] == 0) {pri[tot++] = i;phi[i] = i - 1;}

这里很简单,当i是质数的时候,我们将i假如质数表,并且写上i的欧拉函数为i-1,phi[i]=i-1

for (int j = 0; j < tot and pri[j] * i <= N; j++) {if (i % pri[j] == 0) {phi[i * pri[j]] = pri[j] * phi[i];flag[i * pri[j]] = 1;break;}else {flag[i * pri[j]] = 1;phi[i * pri[j]] = (pri[j] - 1) * pri[i];}}

这里依旧是欧拉筛的板子,对于任意一个合数,例如 i*pri【j】,

如果i和pri【j】互质的话,其欧拉函数为: phi【i*pri【j】】=phi【pri【j】】 * phi【i】;

但是如果i和pri【j】不互质的话,我们就用上面写的表达式:

\psi \left(n\right) = \prod_{i=1}^{m} \psi \left( p_{i}^{k_{i}} \right ) =\left(\prod_{i=1}^{m} p_{i}^{k_{i}} \right)\cdot \left(\prod_{i}^{m}\left(1-\frac{1}{p}\right)\right)=n\cdot \prod_{i}^{m}\left(1-\frac{1}{p} \right)

带入i*pri[j]可得:

\psi\left(i*pri[j] \right )=i*pri[j]\prod_{i=1}^{n}\left( 1-\frac{1}{p}\right)=pri[j]*\psi(i)

至此,筛法求欧拉函数就结束了

欧拉定理:对于正整数a,n,若a\perpn,则a^{\psi\left(n\right)}\equiv 1 \left(mod \ n \right )

扩展欧拉定理:

对于正整数a,n,始终有 a^{\psi \left(n \right )}\equiv a^{k\psi \left(n \right )}\left(mod\ n \right ),k\epsilon N_{+}

那么对于任意的正整数a,k,n ,当k大于 \psi\left(n \right )时,

a^{k} \equiv a^{k\ mod \ \psi\left(n \right )+\psi\left(n \right )}\left(mod\ n \right )

对于这些定理,此处不加以证明,背过即可。

下面给出一些例题,用来了解一些欧拉函数在算法竞赛中的应用

第一题:

《洛谷深入浅出进阶篇》p2568 GCD-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/louisdlee/article/details/134886352?spm=1001.2014.3001.5502

第二题:

《洛谷深入浅出进阶篇》P5091 —— 扩展欧拉定理,快读取模。-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/louisdlee/article/details/134891765?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134891765%22%2C%22source%22%3A%22louisdlee%22%7D

第三题:

《深入浅出进阶篇》p2303Longge ——欧拉函数的运用-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/louisdlee/article/details/134892843?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134892843%22%2C%22source%22%3A%22louisdlee%22%7D 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/214015.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器视觉技术栈】03 - 镜头

镜头 定焦镜头变焦镜头远心镜头 FA镜头与远心镜头的区别&#xff1f; 焦距越小畸变程度越大&#xff0c;精度要求不高的场景可以使用焦距大的FA镜头做尺寸测量&#xff0c;但焦距越大带来的问题就是整个机械设备越大。精度高的场景使用远心镜头进行尺寸测量。 光学基础知识…

Gee教程6.模板(HTML Template)

这一章节的内容是介绍 Web 框架如何支持服务端渲染的场景 实现静态资源服务(Static Resource)。支持HTML模板渲染。 这一章节很多内容是基于net/http库的&#xff0c;该库已经实现了很多静态文件和HMML模板的相关功能的了。 静态文件 网页的三剑客&#xff0c;JavaScript、C…

APP备案,最新获取安卓签名文件中MD5等信息方法

1.通过签名文件获取SHA1和SHA256 直接通过cmd执行命令 keytool -list -v -keystore xxxxx/xxx/xx/xxx.keystore输入后回车会提示输入密码库口令&#xff0c;直接输入Keystore密码&#xff08;输入过程中终端上不会显示&#xff0c;输完回车就行&#xff09; 2.获取md5 由于…

vmware ubuntu22 安装vmtools并设置共享文件夹

我是你爹&#xff0c;再不会就紫砂。 权限不够或没读写权限自己改下就行。 1. 主机下新建文件夹&#xff0c;并如下图设置成共享 2. 把上面文件夹路径添加到共享文件夹里面 3. 开启ubuntu&#xff0c;在登陆界面显示之前我们会看到下图的重新安装vmware tools由灰变黑&#x…

Linux面试必备系列

文章目录 1、Linux的体系结构2、如何查找特定的文件&#xff08;find&#xff09;3、检索文件内容(grep)4、对文件内容做统计(awk)5、批量替换文本内容&#xff08;sed&#xff09; 1、Linux的体系结构 体系结构主要分为用户态&#xff08;用户上层活动&#xff09;和内核态内核…

OpenHarmony北向-让更广泛的应用开发者更容易参与

一、标准系统的体验 按照官方文档指导&#xff0c;这样操作&#xff0c;OH标准系统开发板就可以运行开发者开发的OpenHarmony应用了。 二、实际情况 按照开发文档上的说明&#xff0c;肯定是装不上的。因为OH不同的发行版&#xff0c;不同发行板不同的设备&#xff0c;IDE&…

Kubernetes架构及核心部件

文章目录 1、Kubernetes集群概述1.1、概述1.2、通过声明式API即可 2、Kubernetes 集群架构2.1、Master 组件2.1.1、API Server2.1.2、集群状态存储2.1.3、控制器管理器2.1.4、调度器 2.2、Worker Node 组件2.2.1、kubelet2.2.2、容器运行时环境2.2.3、kube-proxy 2.3、图解架构…

c-语言->数据在内存的存储

系列文章目录 文章目录 系列文章目录前言 前言 目的&#xff1a;学习整数在内存的储存&#xff0c;什么是大小端&#xff0c;浮点数的储存。 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下⾯的内容&#xff1a; 整数的2进制表⽰⽅法有三种&#xff0…

可视化监控云平台/智能监控平台EasyCVR国标设备开启音频没有声音是什么原因?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。GB28181视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

sqlite3.44.2的编译

文章目录 sqlite3.44.2的编译概述笔记解决shell.c编译报错的方法整理 - 正常可用的编译脚本过程剩下的事情验证编译出的输出是否可以给工程正常使用?END sqlite3.44.2的编译 概述 想从源码编译一份Sqlite3.44.2出来. 编译sqlite3.44.2前置需要的TCL环境已经编译出来到了, 做…

uniapp获取wifi连接状态

当使用Uniapp开发移动应用时&#xff0c;我们经常需要获取设备的连接状态&#xff0c;特别是WiFi连接状态。下面是一个简短的关于在Uniapp中获取WiFi连接状态的博客&#xff1a; 在Uniapp中&#xff0c;要获取设备的WiFi连接状态&#xff0c;我们可以利用uni.getNetworkType接…

少女感满满的羽绒服 ~时尚又保暖

玫瑰刺绣新中式羽绒服 粉粉嫩嫩的超级有少女心蓬松柔软又保暖 领口和袖口拼接仿真兔毛增添温暖更显可爱穿上精致可爱不显臃肿 宝贝肯定会喜欢&#xff01;&#xff01;

springboot3远程调用

RPC 两个服务器之间的调用 远程请求 内部服务之间的调用 可以通过 cloud 注册中心 openfeign等 外部服务的调用 http请求 外部协议 api:远程接口 sdk&#xff1a;本地调用 调用阿里云的天气请求 方法二&#xff1a; 写每个类型调用的接口 例如短信功能 天气查询功能 快递功…

同旺科技 USB TO RS-485 定制款适配器--- 拆解(四)

内附链接 1、USB TO RS-485 定制款适配器 ● 支持USB 2.0/3.0接口&#xff0c;并兼容USB 1.1接口&#xff1b; ● 支持USB总线供电&#xff1b; ● 支持Windows系统驱动&#xff0c;包含WIN10 / WIN11系统32 / 64位&#xff1b; ● 支持Windows RT、Linux、Mac OS X、Windo…

Java利用TCP实现简单的双人聊天

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为聊天。然后创建包&#xff0c;创建两个类&#xff0c;客户端&#xff08;SocketClient&#xff09;和服务器端&#xff08;SocketServer&#xff09; 二、实现代码 客户端代码&#xff1a; package 聊天; import ja…

【Redis深度专题】「核心技术提升」从源码角度探究Redis服务的内存使用、清理以及逐出等底层实现原理

背景介绍 Redis作为一种高性能的内存NoSQL数据库&#xff0c;其容量受限于最大内存的限制。用户在使用阿里云Redis时&#xff0c;除了对性能和稳定性有较高的要求外&#xff0c;对内存占用也非常敏感。然而&#xff0c;在实际使用中&#xff0c;一些用户可能会发现他们的线上实…

Android View的 getHeight 和 getMeasuredHeight 的区别

前言 先简单复习一下Android View 的 绘制顺序&#xff1a; 1、onMeasure&#xff08;测量&#xff09;&#xff0c;先根据构造器传进来的LayoutParams&#xff08;布局参数&#xff09;&#xff0c;测量view宽高。 2、onLayout&#xff08;布局&#xff09;&#xff0c;再根…

ExoPlayer架构详解与源码分析(10)——H264Reader

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

iOS(swiftui)——系统悬浮窗( 可在其他应用上显示,可实时更新内容)

因为ios系统对权限的限制是比较严格的,ios系统本身是不支持全局悬浮窗(可在其他app上显示)。在iphone14及之后的iPhone机型中提供了一个叫 灵动岛的功能,可以在手机上方可以添加一个悬浮窗显示内容并实时更新,但这个功能有很多局限性 如:需要iPhone14及之后的机型且系统…

软件测试相关

软件测试是什么&#xff1f; 使用人工和自动手段来运行或测试某个系统的过程&#xff0c;其目的在于验证它是否满足规定的需求或弄清预期结果与实际结果的差别。 为什么做软件测试&#xff1f;目的是什么&#xff1f; 发现软件存在的代码或业务逻辑错误 检验产品是否符合用户需…