码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ2705: [SDOI2012]Longge的问题

时间:2017-09-07 20:22:13      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:gif   register   lin   scan   http   mit   gis   des   src   

2705: [SDOI2012]Longge的问题

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 3197  Solved: 1996
[Submit][Status][Discuss]

Description

Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。

Input

一个整数,为N。

Output

一个整数,为所求的答案。

Sample Input

6

Sample Output

15

HINT

【数据范围】

对于60%的数据,0<N<=2^16。

对于100%的数据,0<N<=2^32。

 

Source

 
【题解】
 
技术分享
技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cmath> 
 6 #define min(a, b) ((a) < (b) ? (a) : (b))
 7 #define max(a, b) ((a) > (b) ? (a) : (b))
 8 
 9 long long n;
10 
11 long long phi(long long x)
12 {
13     long long ans = x;
14     long long ma = sqrt(x);
15     for(register long long i = 2;i <= ma;++ i)
16         if(x % i == 0)
17         {
18             ans -= ans/i;
19             while(x % i == 0)x /= i;
20         }
21     if(x > 1)ans -= ans/x;//显然>根号n的n的质因数只有一个
22     return ans;
23 }
24 int main()
25 {
26     scanf("%d", &n);
27     register long long last, ans = 0;
28     register long long ma = sqrt(n);
29     for(register long long d = 1;d <= ma;++ d)
30     {
31         if(n % d == 0)
32         {
33             ans += phi(d) * (n/d);
34             if(d * d != n)ans += phi(n/d) * (d);
35         }
36     }
37     printf("%lld", ans);
38     return 0;
39 }
BZOJ2705

 

 

BZOJ2705: [SDOI2012]Longge的问题

标签:gif   register   lin   scan   http   mit   gis   des   src   

原文地址:http://www.cnblogs.com/huibixiaoxing/p/7491556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!