【学习笔记】欧拉函数

几个基本的定义

数论函数

定义域为正整数的函数

积性函数

(1)若 a,b 互质,则 f(ab)=f(a)f(b)
(2)对于一个正整数 n,将其写为 n=piki,则 f(n)=f(piki)f(npiki)=f(piki)

完全积性函数

在任意条件下,都满足 f(ab)=f(a)f(b)

欧拉函数

基本定义

我们定义 φ(n) 为欧拉函数,其定义为不超过 n 且与 n 互质的数的个数。

基本性质

性质一

n=piki,那么
φ(n)=n(11pi)

性质二

a,b 互质,那么 φ(ab)=φ(a)φ(b),即欧拉函数是一个积性函数。
可以通过性质一来证明。

性质三

φ(pk)=pkpk1=(p1)pk1
可以通过性质一来证明。

性质四

n 为奇数,那么存在 φ(2n)=φ(n)
可以用欧拉函数的积性来证明。

性质五

n 大于 2,那么存在 φ(n) 为偶数。
所有与 n 互质的数的和为 φ(n)2n ,因为与 n 互质的数都是成对存在的,也就是说若存在 in 互质,那么 nin 也互质,以这个性质就可以得出上文的那个式子

性质六

n 为质数,那么 φ(n)=n1
这个是非常显然的。

性质七

d|nφ(d)=n
很有用的一个性质。

线性筛求欧拉函数

(1)若 n 为质数,根据性质七就好
(2)若 iprimej 不互质,φ(i×primej)=φ(i)×primej,这个可以通过性质二、三来证明
(3)若 iprimej 互质,φ(i×primej)=φ(i)φ(primej)=(p1)φ(i),可以根据性质二、六证明
代码实现:

点击查看代码
void Phi(long long mx){
	phi[1] = 1;
	for(long long i=2; i<=mx; i++){   //切记切记 i 从 2 开始,从 1 就会有大错 
		if(!no_pri[i]){
			pri[++size] = i;
			phi[i] = i-1;
		}
		for(long long j=1; j<=size && i * pri[j] <=mx; j++){
			no_pri[i * pri[j]] = true;
			if(i % pri[j] == 0){
				phi[i * pri[j]] = phi[i] * pri[j];
				break; 
			}
			else{
				phi[i * pri[j]] = phi[i] * (pri[j] - 1);
			}
		}
	}
}

代码解释:
prii 表示第 i 个质数,phii 表示 φ(i)

posted @   linyihdfj  阅读(194)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示