首页 > 其他 > 详细

BZOJ2705 [SDOI2012]Longge的问题

时间:2015-10-15 22:13:42      阅读:276      评论:0      收藏:0      [点我收藏+]

2705: [SDOI2012]Longge的问题

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 1654  Solved: 1042
[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

round1 day1

 

 

【思路】源于网上

技术分享

 

【代码】

 

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 typedef long long LL;
 6 int n;
 7 
 8 inline LL euler_phi(int p) {
 9     int m=sqrt(p);
10     LL ans=p;
11     for(int i=2;i<=m;i++) if(p%i==0)
12     {
13         ans=ans/i*(i-1);
14         while(p%i==0) p/=i;
15     }
16     if(p>1) ans=ans/p*(p-1);
17     return ans;
18 }
19 
20 int main() {
21     cin>>n;
22     LL ans=0;
23     for(int i=1;i*i<=n;i++)
24      if(n%i==0) {
25          ans += i*euler_phi(n/i);
26          if(i*i<n) ans += n/i*euler_phi(i);
27      }
28      cout<<ans;
29      return 0;
30 }

 

BZOJ2705 [SDOI2012]Longge的问题

原文:http://www.cnblogs.com/lidaxin/p/4883684.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!