BZOJ2705: [SDOI2012]Longge的问题
2016-06-02 19:19
260 查看
Description
[align=left]Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。[/align]Input
[align=left]一个整数,为N。[/align]Output
[align=left]一个整数,为所求的答案。[/align]Sample Input
6Sample Output
15HINT
【数据范围】对于60%的数据,0<N<=2^16。
对于100%的数据,0<N<=2^32。
丝帛题,枚举gcd(n,i),将N的所有约数求出来,然后容斥一下就能对于每个gcd(n,i)计算满足条件的i的个数了。
时间复杂度O(sqrt(N))。
#include<cstdio> #include<cctype> #include<queue> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ren for(int i=first[x];i;i=next[i]) using namespace std; typedef long long ll; const int maxn=1010; ll pri[maxn],ans[maxn],res,n; int cnt; int main() { scanf("%lld",&n); for(ll i=1;i*i<=n;i++) if(n%i==0) { pri[++cnt]=i; if(i*i!=n) pri[++cnt]=n/i; } sort(pri+1,pri+cnt+1); dwn(i,cnt,1) { ans[i]=n/pri[i]; rep(j,i+1,cnt) if(pri[j]%pri[i]==0) ans[i]-=ans[j]; } rep(i,1,cnt) res+=ans[i]*pri[i]; printf("%lld\n",res); return 0; }
相关文章推荐
- 第十三周【项目4-立体类族共有的抽象类】
- 第9周课后实践 阅读程序,请写出这些程序的运行结果(3)
- OpenGL 超级宝典 读书笔记-1
- spark's deploy mode
- 通过WINNT.H定义的结构体,获取进程IAT表
- LightOJ 1074 spfa判断负环
- 终端执行python脚本 (for Mac)
- RNN(Recurrent Neural Networks)公式推导和实现
- std::slice
- 【UGUI实战】游戏右上角CoinBar的自动调整
- 多击
- Java面向对象编程之异常处理机制
- SecureCRT密钥远程登录Linux 【转】
- 面试:字符串:产生括号
- UIView Class Reference
- avalon.js 1.4.6简单列表数据绑定ms-repeat ms-click
- 用php输入表格内容
- java多态
- 第二阶段冲刺——个人总结06
- 代码段接收并遍历返回值为动态游标的方法