關於歐拉函數及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)的歐拉數

參考代碼如下:

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