您的位置:首页
BZOJ 2818 Gcd 线性欧拉
2017-07-29 17:55
232 查看
题意:链接
方法:线性欧拉
解析:
首先列一下表达式
gcd(x,y)=z(z是素数而且x,y<=n).
然后我们能够得到什么呢?
gcd(x/z,y/z)=1;
最好还是令y>=x
则能够得到我们要的答案就是∑max(y/z)i=1phi(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); }
相关文章推荐
- BZOJ 2818 Gcd 线性欧拉
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes筛)
- [BZOJ 2818] Gcd 线性筛+欧拉函数前缀和
- BZOJ 2818 Gcd (数论 欧拉)
- bzoj 2818: Gcd 线性筛求欧拉函数
- Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
- 【数论】【枚举】【莫比乌斯反演】【线性筛】bzoj2818 Gcd
- 【bzoj2818】Gcd 线性筛法
- bzoj 2818 gcd 线性欧拉函数
- 【欧拉函数+线性筛】bzoj2818: Gcd
- BZOJ 2818: 欧拉筛法求gcd(x,y)==k(k为质数)
- [BZOJ2818] Gcd (数论,欧拉函数,线性筛)
- 【BZOJ2818】Gcd(莫比乌斯反演,欧拉函数)
- BZOJ-2005 能量采集 2D GCD sum 线性筛
- Gcd [Bzoj 2818]
- BZOJ2818 GCD 【莫比乌斯反演】
- 【BZOJ 2818】Gcd
- BZOJ 2818: Gcd