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)的歐拉數
參考代碼如下: