【bzoj2818】Gcd 欧拉函数
来源:互联网 发布:虚拟机上装linux 编辑:程序博客网 时间:2024/04/29 17:00
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2818
【题解】
用f[i]表示1~i中gcd(a,b)=1的数对(a,b)的对数,那么显然 f[i] = 1+2* sigma(phi[j]) 1<j<=i
那么ans = sigma(f[N/p]) p为小于N的素数
原理很简单,即如果gcd(a,b)=1,那么gcd(a*p,b*p)=p
/************* bzoj 2818 by chty 2016.11.3*************/#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>using namespace std;#define MAXN 10000010int n,cnt,prime[MAXN],check[MAXN],phi[MAXN];long long f[MAXN],ans;inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) {x=x*10+ch-'0'; ch=getchar();} return x*f;}void get(){ phi[1]=1; for(int i=2;i<=n;i++) { if(!check[i]) {prime[++cnt]=i; phi[i]=i-1;} for(int j=1;j<=cnt&&prime[j]*i<=n;j++) { check[i*prime[j]]=1; if(i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1); else {phi[i*prime[j]]=phi[i]*prime[j]; break;} } }}int main(){ freopen("cin.in","r",stdin); freopen("cout.out","w",stdout); n=read(); get(); f[1]=1; for(int i=2;i<=n;i++) f[i]=f[i-1]+2*phi[i]; for(int i=1;i<=cnt;i++) if(prime[i]<n) ans+=f[n/prime[i]]; printf("%lld\n",ans); return 0;}
1 0
- 【bzoj2818】Gcd 欧拉函数
- 【bzoj2818】Gcd 欧拉函数
- [bzoj2818]Gcd 欧拉函数
- BZOJ2818 Gcd(欧拉函数)
- [BZOJ2818] gcd - 欧拉函数+筛法
- BZOJ2818 Gcd(欧拉函数)
- [bzoj2818]GCD 欧拉函数线筛
- 【欧拉函数+线性筛】bzoj2818: Gcd
- bzoj2818: Gcd(欧拉函数)
- bzoj2818 欧拉函数
- bzoj2818 gcd 欧拉函数(前缀和)
- BZOJ2818:Gcd(莫比乌斯函数 & 欧拉函数)
- bzoj2818(欧拉函数的应用!!!!!!!!!!!!!!)
- bzoj2818 欧拉函数、莫比乌斯反演
- 【BZOJ2818】Gcd
- [BZOJ2818] Gcd
- [BZOJ2818]Gcd
- bzoj2818 Gcd
- 【bzoj3670】动物园 kmp
- 【bzoj1030】文本生成器 AC自动机+树型dp
- 【leetcode】463. Island Perimeter【E】
- 曹冲养猪 中国剩余定理
- 【HDU1573】X问题 中国剩余定理
- 【bzoj2818】Gcd 欧拉函数
- java自带线程池和队列详细讲解
- git笔记:一篇搞懂git是个什么玩意
- 【bzoj3667】Rabin-Miller算法 素数测试
- UFLDL教程Exercise答案(3.1):PCA in 2D
- JavaEE:Spring-security笔记
- NOIP2016总结
- 左右法则
- 计算机中的大小端存储