BZOJ 2818 Gcd 线性欧拉
2015-07-17 20:43
197 查看
题意:链接
方法:线性欧拉
解析:
首先列一下表达式
gcd(x,y)=z(z是素数并且x,y<=n).
然后我们可以得到什么呢?
gcd(x/z,y/z)=1;
不妨令y>=x
则可以得到我们要的答案就是∑max(y/z)i=1phi(i)\sum_{i=1}^{max(y/z)}phi(i)
而max(y/z)就是max(n/z);
所以只需要枚举一下质数z随便搞一下就好了,最好用前缀和记录
HINT:前缀和写树状数组的都是(*)
代码:
正常人做法1.1s
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 10000010 using namespace std; typedef long long ll; int n,tot; int prime ; int phi ; ll sum ; int f ; void sieve() { phi[1]=1; sum[1]=1; for(int i=2;i<=n;i++) { if(!f[i]) { prime[++tot]=i; phi[i]=i-1; } for(int j=1;j<=tot,i*prime[j]<=n;j++) { f[i*prime[j]]=1; if(i%prime[j]==0) { phi[i*prime[j]]=phi[i]*prime[j]; break; }else { phi[i*prime[j]]=phi[i]*phi[prime[j]]; } } sum[i]=sum[i-1]+phi[i]; } } int main() { scanf("%d",&n); sieve(); ll print=0; for(int i=1;i<=tot;i++) { int up=n/prime[i]; print+=sum[up]; } printf("%lld\n",print*2-tot); }
树状数组4.8s
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 10000010 using namespace std; typedef long long ll; int n,tot; int prime ; int phi ; ll sum ; int f ; int lowbit(int x){return x&(-x);} void update(int x,int p) { while(x<=n) { sum[x]+=p; x+=lowbit(x); } } ll getsum(int x) { ll ret=0; while(x) { ret+=sum[x]; x-=lowbit(x); } return ret; } void sieve() { phi[1]=1; update(1,1); for(int i=2;i<=n;i++) { if(!f[i]) { prime[++tot]=i; phi[i]=i-1; update(i,phi[i]); } for(int j=1;j<=tot,i*prime[j]<=n;j++) { f[i*prime[j]]=1; if(i%prime[j]==0) { phi[i*prime[j]]=phi[i]*prime[j]; update(i*prime[j],phi[i*prime[j]]); break; }else { phi[i*prime[j]]=phi[i]*phi[prime[j]]; update(i*prime[j],phi[i*prime[j]]); } } } } int main() { scanf("%d",&n); sieve(); ll print=0; for(int i=1;i<=tot;i++) { int up=n/prime[i]; print+=getsum(up); } printf("%lld\n",print*2-tot); }
相关文章推荐
- 由iPhone emoji问题牵出UTF-16编码,UTF-8编码查询
- (中等) POJ 1703 Find them, Catch them,带权并查集。
- 10285 - Longest Run on a Snowboard(DP)
- UVA 12905 Volume of Revolution (几何,微积分)
- LNMP1.2一键安装教程
- R12.2 克隆系统结束后 autocfg 报错 rtld: 0712-001 Symbol __pth_init was referenced from module FNDCPUCF
- PowerPoint2007界面元素推荐
- [LeetCode][Java] Edit Distance
- 准备升大三啦
- 记一次基于Unity的Profiler性能分析
- Case of Fake Numbers
- UIView动画(过渡效果)的学习笔记
- 话说 依赖注入(DI) or 控制反转(IoC)
- 053第256题
- 插入排序
- 有物品数量限制的背包问题
- 适用于PHP初学者的学习线路和建议
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- <七> Linux 文件与目录管理
- 1059. Prime Factors (25)