BZOJ_P2705 [SDOI2012]Longge的问题(数论+欧拉函数)
2016-02-17 16:08
459 查看
BZOJ传送门
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 1868 Solved: 1169
[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
在根号n的时间内计算phi(n/d)
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 1868 Solved: 1169
[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
在根号n的时间内计算phi(n/d)
#include<cstdio> #include<cmath> #include<iostream> using namespace std; long long ans,n; inline long long phi(long long n){ long long ans=n;int m=sqrt(n); for(int i=2;i<=m;i++){ if(!(n%i)){ ans-=ans/i; while(!(n%i)) n/=i; } } if(n>1) ans-=ans/n;return ans; } int main(){ scanf("%lld",&n);int m=sqrt(n); for(int i=1;i<=m;i++) if(!(n%i)){ ans+=i*phi(n/i); if(n/i!=i) ans+=phi(i)*(n/i); } printf("%lld",ans); return 0; }
相关文章推荐
- 关于vmware11下安装centOS6.5出现eth0 no link present问题解决方法
- 指定linux软件安装路径
- java术语(PO/POJO/VO/BO/DAO/DTO)
- Tomcat性能调整完整教程
- EasyX简易绘图实例
- HTTP和HTTPS的区别
- 构造方向可控金字塔
- 服务器端架构,前端服务器与客户端随机负载平衡
- lazyLoad懒加载技术
- epoll源码实现分析[整理]
- 01:查找特定的值(1.9)
- 小米5 中框碟照
- javascript 复习重点(两半天)
- SpringMvc与Struts2比较
- iOS的AssetsLibrary框架访问所有相片
- 《转》Objective-C Runtime(4)- 成员变量与属性
- Win7下的java环境变量配置
- eclipse无法访问genymotion模拟器下/data/data文件解决方案
- 第十二章编程练习(1)
- 根据IP地址判断所属城市