51Nod 1040(尤拉函式)

2021-08-26 20:25:26 字數 1062 閱讀 5393

題目鏈結

【題目描述】

給出乙個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6

1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 = 15

input

1個數n(n <= 10^9)

output

公約數之和

input示例

6 output示例

15【思路】

既然是1~n與n的公約數,那麼肯定是n的因子,每乙個

n n

的因子所對 su

m' role="presentation">sum

sum產生的增量為:gc

d(n,

i)=x

(xg cd

(n,i

)=x(

x為這個因子)的個數,也就是gc

d(nx

,ix)

=1g cd

(nx,

ix)=

1的個數,也就是 ph

i(nx

) phi

(nx)

了,寫成公式就是 ∑i

=1ng

cd(i

,n)=

∑i=1

,i|n

nphi

(ni)

×i∑ i=

1ngc

d(i,

n)=∑

i=1,

i|nn

phi(

ni)×

i

#include

using

namespace

std;

typedef

long

long ll;

int euler_phi(int n)

}if (n > 1) ans = ans / n *(n - 1);

return ans;

}int main()

}printf("%lld\n",ans);

return

0;}

51nod 1040 最大公約數之和 尤拉函式

題目傳送門 我連這種水題都不會做啦 感覺要炸啊 n 的最大公約數必定是 n的因數 x 如果有 g個數和 n 的最大公約數為 x,那麼這 g 個數對答案的貢獻顯然為x g。那麼問題就轉化成了如何快速求出和 n 的最大公約數為 x的個數 g 觀察等式gc d n,i x 可以轉化成gc d n x,i ...

51nod 1040 最大公約數之和(尤拉)

連線 根據題意我們要把每個數與n 的最大公約數求出來是不可能的,先找出n的所有因數,既然是n的最大公約數,那麼他們之間肯定有共同的因子,而與n 的因子互質的數他們的最大公約數就是該因子m,再乘以倍數,總和相加就是了 include include include using namespace st...

51nod1136 尤拉函式

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為euler s totient function 函式 尤拉商數等。例如 8 4 phi 8 4 因為1,3,5,7均和8互質。input 輸入乙個數n。2 n 10 9 output 輸出phi n ...