bzoj2705【SDOI2012】Longge的问题
来源:互联网 发布:ubuntu开机花屏 编辑:程序博客网 时间:2024/03/29 16:34
2705: [SDOI2012]Longge的问题
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2105 Solved: 1300
[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
欧拉函数的应用
令s[k]表示gcd(i,n)=k的i的个数,则ans=∑(k*s[k])。
因为gcd(i,n)=k,所以gcd(i/k,n/k)=1,所以s[k]=phi(n/k),其中phi(i)表示i的欧拉函数。
枚举n的因数k,计算欧拉函数。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<algorithm>#define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define ll long longusing namespace std;ll n,ans;inline ll phi(ll x){ll ret=x,tmp=floor(sqrt(x));F(i,2,tmp) if (x%i==0){ret=ret/i*(i-1);while (x%i==0) x/=i;}if (x>1) ret=ret/x*(x-1);return ret;}int main(){scanf("%lld",&n);ll tmp=floor(sqrt(n));F(i,1,tmp) if (n%i==0){ans+=phi(n/i)*i;if (i*i!=tmp) ans+=phi(i)*(n/i);}printf("%lld\n",ans);}
1 0
- bzoj2705[SDOI2012]Longge的问题
- 【SDOI2012】【BZOJ2705】Longge的问题
- [BZOJ2705][SDOI2012]Longge的问题
- BZOJ2705: [SDOI2012]Longge的问题
- bzoj2705 [SDOI2012]Longge的问题
- BZOj2705: [SDOI2012]Longge的问题
- BZOJ2705 [SDOI2012]Longge的问题
- [BZOJ2705][SDOI2012]Longge的问题
- BZOJ2705: [SDOI2012]Longge的问题
- bzoj2705【SDOI2012】Longge的问题
- Longge的问题[SDOI2012][bzoj2705]
- BZoj2705: [SDOI2012]Longge的问题
- 【SDOI2012】bzoj2705 Longge的问题
- bzoj2705: [SDOI2012]Longge的问题
- BZOJ2705: [SDOI2012]Longge的问题
- bzoj2705[SDOI2012] Longge的问题
- bzoj2705 [SDOI2012]Longge的问题
- 【bzoj2705】[SDOI2012]Longge的问题
- bzoj3170【TJOI2013】松鼠聚会
- 二分算法problem1001
- 切入业务日志
- LeetCode 160. Intersection of Two Linked Lists
- iOS 通知传值(顺传)
- bzoj2705【SDOI2012】Longge的问题
- ios pickerview选择城市
- Android ListView实现上拉到底部的时候自动刷新数据
- 98%的人没解出的德国面试逻辑题(离散数学篇)!?
- win10 wamp 无法启动 红色
- bzoj3004 吊灯
- javascript函数apply的使用和理解
- 关于python3.2的'dict' object has no attribute 'iteritems'
- Android 深入理解Android中的自定义属性