題目鏈結
【題目描述】
給出乙個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 ...