bzoj-2705
2016-03-17 19:43
363 查看
Longge的问题
Time Limit:3000MS Memory Limit:131072KB 64bit IO Format:%lld
& %llu
Submit Status
Description
[align=left]Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。[/align]
Input
[align=left]一个整数,为N。[/align]
Output
[align=left]一个整数,为所求的答案。[/align]
Sample Input
Sample Output
Hint
【数据范围】
对于60%的数据,0<N<=2^16。
对于100%的数据,0<N<=2^32。
代码如下:
Time Limit:3000MS Memory Limit:131072KB 64bit IO Format:%lld
& %llu
Submit Status
Description
[align=left]Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。[/align]
Input
[align=left]一个整数,为N。[/align]
Output
[align=left]一个整数,为所求的答案。[/align]
Sample Input
6
Sample Output
15
Hint
【数据范围】
对于60%的数据,0<N<=2^16。
对于100%的数据,0<N<=2^32。
代码如下:
#include<stdio.h> #include<cmath> int m; int ef(int n){ int cnt=n; int i; int k=n; for(i=2;i<=sqrt(k);i++){ if(n%i==0){ cnt-=cnt/i; while(n%i==0)n/=i; } } if(n>1)cnt-=cnt/n; return cnt; } int main(){ int n,d; long long ans=0; scanf("%d",&n); m=sqrt(n); for(d=1;d<=m;d++){//枚举公约数 if(n%d==0){ ans+=(long long)d*ef(n/d); ans+=(long long)(n/d)*ef(d); } } printf("%lld\n",ans); }
相关文章推荐
- 0317 复利计算总结
- Oracle database
- /etc/selinux/config
- I
- 【Scikit-Learn】初试开源机器学习工具
- PHP 语法
- 41.影响iOS6与iOS7屏幕适配的参数和因素
- Android_Fragment和activity传值(项目体现)
- 教你写响应式框架(四)
- 决策树对比
- JMeter二次开发(2)-编写 JSON Assertion 插件
- linux随心笔记之用户群组的概念
- 数据库MySql阶段总结
- 利用外观模式模拟股民炒股 C++
- ACRush 楼天城 回忆录
- nrf51822 --- ancs(1)
- ffmpeg 安装过程
- 多线程
- 【bzoj1982】【Spoj2021】【Moving Pebbles】【博弈论】
- 蓝桥杯 历届试题 敢死队