HYSBZ - 2705 Longge的问题 (欧拉函数)
2016-03-16 17:32
197 查看
HYSBZ - 2705 Longge的问题
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。 思路: //因为n的取值很大,所以用平常的枚举肯定是超时的。 用欧拉函数枚举n的所有的因子,找出n的所有因子的个数,然后用因子*因子的个数,在求和即可。 #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #include<queue> #define INF 0x3f3f3f3f #define IN __int64 #define ull unsigned long long #define ll long long #define N 1000010 #define M 1000000007 using namespace std; ll n; ll getp(ll x) { ll cnt=x; for(int i=2;i*i<=n;i++) { if(x%i==0) { cnt=cnt/i*(i-1); while(x%i==0) x/=i; } } if(x>1) cnt=cnt/x*(x-1); return cnt; } int main() { int i,j; while(scanf("%lld",&n)!=EOF) { ll ans=0; for(i=1;i<=sqrt(n);i++) { if(n%i==0) { ans+=i*getp(n/i); if(i*i<n) ans+=(n/i)*getp(i); } } printf("%lld\n",ans); } return 0; } |
相关文章推荐
- 面对315,饿了么的公关招式其实叫“对人不对事”
- 礼拜三log~常用java函数 & jQuery ajax的serialize() 方法 & 获取参数 & IE浏览器下button显示黑边框问题 & 关于ajax
- android studio打包aar心得
- 深入理解hadoop(三)
- 渗透测试视频分享
- 人际沟通要有的心里准备
- 为已经部署完成OGG的抽取进程配置LOGRETENTION
- C# IntPtr转换为Byte[]
- 关于多个block问题
- 为什么我们要使用min-height和max-height样式属性?
- 使用SHBrowseForFolder函数打开文件目录对话框
- android源码应用中导入第三方jar包
- Android中Parcelable接口用法
- CSS之剪切横幅
- 自己实现一个简单的支持并发的Web服务器
- xcode警告:Implicitly declaring
- PAT--1113. Integer Set Partition
- BusyBox init及inittab文件详解
- CSS之剪切横幅
- 【Unity02】尝试CardboardDemo打包apk