1. 程式人生 > >2705: [SDOI2012]Longge的問題

2705: [SDOI2012]Longge的問題

現在 size pre gre gcd can return tdi spa

Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 4064 Solved: 2596
[Submit][Status][Discuss]

Description

Longge的數學成績非常好,並且他非常樂於挑戰高難度的數學問題。現在問題來了:給定一個整數N,你需要求出∑gcd(i, N)(1<=i <=N)。

Input

一個整數,為N。

Output

一個整數,為所求的答案。

Sample Input

6

Sample Output

15

HINT

0<N<=2^32。



2019.1.1新加數據一組。

歐拉函數

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 #define LL long long
 6 
 7 int eular(LL n)
 8 {
 9     LL ret=n;
10     LL nn=sqrt(n);
11     for(LL i=2;i<=nn;i++)
12     {
13         if(n%i==0)
14             ret=ret/i*(i-1
); 15 while(n%i==0) n/=i; 16 } 17 if(n>1) ret=ret/n*(n-1); 18 return ret; 19 } 20 21 LL n,ans; 22 23 int main() 24 { 25 scanf("%lld",&n); 26 LL nn=sqrt(n); 27 for(LL i=1;i<=nn;i++) 28 { 29 if(n%i==0) ans+=i*eular(n/i)+(n/i)*eular(i); 30
} 31 if(nn*nn==n) ans-=eular(nn)*nn; 32 printf("%lld",ans); 33 return 0; 34 }

2705: [SDOI2012]Longge的問題