【51Nod 1188】最大公约数之和2
2016-07-06 19:46
405 查看
Description
给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和。G=∑i<Ni=1∑j≤Nj=i+1gcd(i,j)
相当于计算这段程序(程序中的gcd(i,j)表示i与j的最大公约数):
G=0;
for(i=1;i
Solution
跟最大公约数和很像啦。这只是加强版而已。范围变小了,用线性筛一下欧拉函数,然后找出所有包含此因数的且在范围内的数,然后统计答案。
用一个前缀和函数就好了。
Code
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn=5000007; typedef long long ll; int i,j,k,l,t,n,m,q; int phi[maxn],p[maxn]; bool bz[maxn]; ll ans,a[maxn]; int main(){ phi[1]=1; fo(i,2,5000000){ if(!bz[i])p[++p[0]]=i,phi[i]=i-1; fo(j,1,p[0]){ t=p[j]*i;if(t>maxn)break;bz[t]=1; if(!(i%p[j])){phi[t]=phi[i]*p[j];break;} phi[t]=phi[i]*(p[j]-1); } } fo(i,2,maxn)fo(j,1,maxn/i)a[i*j]+=phi[i]*j; fo(i,1,maxn)a[i]+=a[i-1]; for(scanf("%d",&q);q;q--){ scanf("%d",&n); printf("%lld\n",a ); } }
相关文章推荐
- cocos2dx3.0rc导出自定义类到lua的方法详细步骤
- nginx静态代理配置
- 卸载Windows应用程序后,延迟删除自身文件,以及一些卸载过程中暂时无法删除的文件
- Hive知识点总结
- 58. Length of Last Word-split的使用
- 守望先锋笔记
- Linux开发工具(gcc,gdb,make,shell)——三级优化分别做了什么(一)
- JDBC(一)获取数据库连接
- swift 计算100000以内的 回文数
- Android:GridView的item无法响应点击事件
- mfc学习之分析mfc程序执行过程
- hibernate一对多双向关联
- POJ1321
- springmvc+mybatis+shiro+maven开篇
- VS项目名修改
- 在C++中,有哪4个与类型转换符相关的关键字?这些关键字各有什么特点,在什么场合下使用?
- 【转载】简单工厂模式,工厂模式,抽象工厂模式
- 一个很实用的,跳转填写 , 回来赋值.
- java数据类型总结--基本+引用
- Holistically-Nested Edge Detection