把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

【学习笔记】线性筛欧拉函数

Bases

这里给出的筛法是以线性筛素数的方法为基础的。

利用了欧拉函数是积性函数的性质:对于任意互质的数a,b,有f(ab)=f(a)f(b)

筛法

类比于线性筛素数。

i以下的欧拉函数已经被筛出,我们利用iprim往后更新。

如果i是素数,那么φ(i)=i1


如果i%prim[j]!=0 ,那么(i,prim[j])==1, 则有φ(iprim[j])=φ(i)φ(prim[j])=φ(i)(prim[j]1)


如果i%prim[j]==0,则φ(iprim[j])=φ(i)prim[j](先甩结论)

有两个证法:

1.

i%prim[j]==0不能直接算的原因是它两个不互质,那我们把它写成互质的样子。

iprim[j]=Aprim[j]m1prim[j]=Aprim[j]m


有个结论:如果p是质数,那么φ(pk)=pkpk1=pk1(p1)

比较显然,pk是数的总数,而pk只有p这一个质因子,所以它的因数都是p的倍数,即1p,2p,3p,...,pk1ppk的包含自己在内的因数个数有pk1个。

用总数pk减去因数个数pk1就是 φ(pk)。(这里总数和因数个数都算了自己本身,一减就把自己减掉了,所以没有影响)

φ(pk)=pk1(p1)

φ(pk1)=pk2(p1)

联立以上二式可得:φ(pk)=φ(pk1)p


以下将prim[j]简写成p

φ(ip)=φ(A)φ(pm)=φ(A)φ(pm1)p

Apm1=i,则φ(A)φ(pm1)=φ(i)

那么φ(ip)=φ(A)φ(pm1)p=φ(i)p

Q.E.D.

2.

欧拉函数有个通式:(先甩式子再证明)
φ(n)=n(11p1)(11p2)...(11pn)pi是质因数

那么

φ(i)=i(11p1)(11p2)...(11prim[j])

φ(iprim[j])=(iprim[j])(11p1)(11p2)...(11prim[j])=i(11p1)(11p2)...(11prim[j])prim[j]=φ(i)prim[j]

然后来说一下那个什么通式怎么来的:

这里也给出两个证法:

1.容斥原理

n的其中一个质因子是p[1,n]p的倍数有p,2p,3p,...npp一共np个数,[1,n]中不含因子p的数就一共有nnp

n的另外一个质因子是q,同理可得[1,n]中不含因子q的数就一共有nnq个,根据容斥原理,[1,n]中两个质因子均不含的数的个数为nnpnq+npq=n(pqqp+1)pq=n(p1)(q1)pq=np1pq1q=n(11p)(11q)

推广到n的每一个质因子(变形时用到了分组分解因式的方法),可得[1,n]中所有n的质因子均不含的数的个数为ni=1k(11pi),其中,pin的质因子。

φ(n)=ni=1k(11pi)

2.利用积性函数的性质

n=0时,φ(n)=0 成立

n=1时,φ(n)=1 成立

n为质数时,φ(n)=n1 成立

n为一个质数的正整数次幂,即n=pk时,φ(pk)=pkpk1=pk(11p)=n(11p) 成立

n为任意正整数时,根据算术基本定理可得n=p1k1p2k2p3k3...pmkm,其中pi为质因数

根据积性函数的性质φ(n)=φ(p1)φ(p2)...φ(pm)=p1k1(11p1)p2k2(11p2)p3k3(11p3)...pmkm(11pm)=n(11p1)(11p2)...(11pm)

Q.E.D.

(怎么觉得证明通式比证明这个结论本身还要复杂

Code View

void Phi()
{
	for(int i=2;i<=n;i++)
	{
		if(!vis[i]) prim[++pn]=i,phi[i]=i-1;
		for(int j=1;j<=pn&&i*prim[j]<=n;j++)
		{
			vis[i*prim[j]]=1;
			if(i%prim[j]==0)
			{
				phi[i*prim[j]]=phi[i]*prim[j];
				break;
			}
			else phi[i*prim[j]]=phi[i]*(prim[j]-1);
		}
	}
} 
posted @   Starlight_Glimmer  阅读(1792)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-08-07 矩阵快速幂 学习笔记
2019-08-07 2019暑假中山纪中集训游记
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示