关于欧拉函数及Sicily1085的解法

1. 数论中的欧拉函数复习

F(x): 1~x中与x互质的数的个数,称为欧拉函数

欧拉函数是积性函数,即F(x*y)=F(x)*F(y),如果x和y互质

另外:F(x)=x-1,如果x是素数

F(xp)=xp-xp-1=xp-1*(x-1)

于是关于欧拉函数的求法如下:F(x)=F(x1p1*x2p2*...xnpn),然后采用上式求解

代码如下:

2. 关于Sicily1085

给定一个数N,要求1~N之间的每个数与N的最大公约数之和

算法:枚举每一个最大公约数i,求1~N之间与N的最大公约数是i的数的个数,设为p个,于是答案加上i×p

         枚举的时候因为gcd(x,N)=i即等价于gcd(x/i,N/i)=1,于是等价于求解N/i的欧拉数,这样枚举i,加上i*(N/i)的欧拉数

参考代码如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章