首页 > 其他分享 >欧拉函数

欧拉函数

时间:2024-05-08 20:44:25浏览次数:19  
标签:函数 limits res varphi 互质 欧拉

1 欧拉函数的定义和性质

欧拉函数定义:\(\varphi(n)\) 定义为不超过 \(n\) 且与 \(n\) 互质的正整数的个数。

\[\varphi(n)=\sum \limits_{i=1}^n[gcd(n,i)=1] \]

例如,\(n=4\) 时,有 \(1,3\) 与 \(4\) 互质,因此 \(\varphi(4)=2\);\(n=9\) 时,有 \(1,2,4,5,7,8\) 与 \(9\) 互质,因此 \(\varphi(9)=6\)。

关于欧拉函数,有以下几个公式:

  • 如果 \(p,q\) 为互质的正整数,则 \(\varphi(pq)=\varphi(p)\varphi(q)\)。

这个公式说明欧拉函数是积性函数,有以下推理:

设 \(n=\prod \limits_{i=1}^kp_i^{a_i}\),\(p_i\) 与 \(p_{j}(i \ne j)\) 互质,则有 \(\varphi(n)=\prod \limits_{i=1}^k\varphi(p_i^{a_i})\)。

  • 如果 \(n\) 为正整数,则 \(n=\sum \limits_{d \mid n}\varphi(d)\)

证明:

有 \(n\) 个分数:\(\frac{1}{n},\frac{2}{n},\dots,\frac{n}{n}\)。约分这些分数,它们的分子与分母互质。

由于所有分数都不大于 \(1\),因此分子小于等于分母。如果 \(d \mid n\),那么分母为 \(d\) 的分数有 \(\varphi(d)\) 个(即与 \(d\) 互质且不超过 \(d\) 的数的数量。因为与 \(d\) 不互质且不超过 \(d\) 的数可以继续与 \(d\) 约分)。

这样分数的总数还可以用 \(\sum \limits_{d \mid n}\varphi(d)\) 表示。

这一性质用于杜教筛。

  • 欧拉定理 如果 \(m\) 是正整数,\(a\) 是整数且与 \(m\) 互质,则有:

\(a^\varphi(m) \equiv 1 \pmod m\)。

这一性质常用于欧拉降幂。

2 求欧拉函数的通解公式

设 \(n=\prod \limits_{i=1}^kp_i^{a_i}\),则 \(\varphi(n)=n\prod \limits_{i=1}^k\frac{p_i-1}{p_i}\)。

所以,求欧拉函数变成了分解质因数。时间复杂度为 \(\mathcal{O}(\sqrt{n})\)。

int phi(int n){
	int res=n,i;
	for(i=2;i*i<=n;++i){
		if(!(n%i)){
			res=res/i*(i-1);n/=i;
			while(!(n%i)){
				n/=i;
			}
		}
	}
	if(n>1){
		res=res/n*(n-1);
	}
	return res;
}

3 用线性筛求 \(1 \sim n\) 的欧拉函数

积性函数都可以使用线性筛。用 \(phi_i\) 表示 \(\varphi(i)\),\(div_i\) 表示 \(i\) 的最小质因子。结合线性筛质数的代码,第一层循环 \(i\) 枚举所有数,第二层循环 \(j\) 枚举所有质数。分为以下三种情况:

  1. \(i\) 为质数

此时 \(phi_i=i-1,div_i=i\)。

标签:函数,limits,res,varphi,互质,欧拉
From: https://www.cnblogs.com/lrxmg139/p/18180832

相关文章

  • 08. C语言函数
    【函数基础】函数用于将程序代码分类管理,实现不同功能的代码放在不同函数内,一个函数等于一种功能,其它函数可以调用本函数执行。C语言规定所有的指令数据必须定义在函数内部,比如之前介绍的程序执行流程控制语句,另外修改全局变量的操作也是通过指令进行的,所以全局变量只能在函数内......
  • Oracle常用函数
    计算字符串长度--函数:length()--参数:字段或者字符串SELECTLENGTHb('克峰同学')FROMdual--返回数字4计算字符串字节长度--函数:lengthb()--参数:字段或者字符串--汉字占两个字节,数字和字母占一个字节SELECTLENGTHb('克峰同学')FROMdual--返回数字8......
  • mysql函数
    1.字符串函数 MySQL中内置了很多字符串函数,常用的几个如下: 演示:concat:字符串拼接selectconcat('Hello','MySQL');lower:全部转小写selectlower('Hello');upper:全部转大写selectupper('Hello');lpad:左填充selectlpad('01',......
  • varlet库loading组件模版使用转函数式调用方法
    2024年5月8日10:34:19varlet库loading组件模版使用转函数式调用方法鉴于在H5中varlet.Snackbar在axios请求封装函数中总是会产生阻塞现象问题,而varlet.loading又不能函数式调用。//loading.vue<scriptlang="ts"setup>import{ref,onMounted}from'vue'import{useWi......
  • linux系统内置函数
    一、read-t限制时间,单位秒,到时间后不输入直接中断会话-q提示信息read-t10-p"请输入您的数据"message(接受数据的参数)echo$message二、basename获取文件(文件夹名称),获取路径的尾端名称,相当于file.getName()三、dirname获取文件的文件夹的路径(不要路径的尾端)四、......
  • 库函数和系统调用函数有什么区别
    一、概念  库函数调用是语言或应用程序的一部分,而系统调用是操作系统的一部分,跨平台技术的原理就是通过库函数实现的,库函数可以理解为是对系统调用的一层封装,但库函数不是必须包含系统调用。二、区别抽象级别:库函数:通常位于更高级别的抽象层。它们为程序员提供了更简洁、......
  • DeleteChar函数
    设计一程序实现功能,处理字符串A,处理规则是只要B字里面有的字母,不分大小写,一律从A字符串中删掉。char*delChar(char*A,constchar*B){intc;//记录A中相同的字符数且与B中字符相同的情况while(*B){if((*B<'A'||*B>'Z')&&(*B<'a'||*B>'z&......
  • 系统调用与库函数是什么,区别是什么
    系统调用与库函数是什么,区别是什么今天学习到了文件IO方面,知道了在Linux中使用命令mkdir创建的并不是文件夹而是目录,有很多人喜欢将此认为是文件夹,严格意义上俩者是有很大的不同,今天通过查询资料得知俩者的区别,希望一下对于疑惑的你有所帮助。目录系统调用与库函数是什么,区别是......
  • 自定义单链表(非循环)的基本接口函数
    文件描述及头文件包含/********************************************************************* 文件名称: 单链表(非循环)的基本接口程序* 文件作者:[email protected]* 创建日期:2024/05/07* 文件功能:对单链表的增删改查功能的定义* 注意事项:No......
  • 自定义单链表(非循环)反转的基本函数接口
    题干structListNode*ReverseList(structListNode*head){if(head==NULL||head->next==NULL){returnhead;}else{structListNode*Phead=head;structListNode*temp=head->next;Phead->next=NULL;......