bzoj 2818: Gcd 线性筛求欧拉函数
来源:互联网 发布:莫言生死疲劳淘宝 编辑:程序博客网 时间:2024/06/05 19:44
题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.
分析:线性筛和用线性筛求欧拉函数链接:http://blog.csdn.net/nk_test/article/details/46242401
那么这题其实就是枚举每个素数作为gcd(x,y)然后求[1,n/prime]的范围内有多少互质的数对(x,y),那么这个其实就是欧拉函数的前缀和。
代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define ll long long#define N 10000005using namespace std;int n,tot,prime[N],not_prime[N];ll phi[N];void getphi(int n){phi[1]=1;for (int i=2;i<=n;i++){if (!not_prime[i]){prime[++tot]=i;phi[i]=i-1;}for (int j=1;j<=tot&&prime[j]*i<=n;j++){not_prime[i*prime[j]]=1;if (i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}phi[i*prime[j]]=phi[i]*(prime[j]-1);}}}int main(){scanf("%d",&n);getphi(n);for (int i=2;i<=n;i++)phi[i]+=phi[i-1];ll ans=0;for (int i=1;i<=tot;i++)ans+=phi[n/prime[i]];printf("%lld",ans*2-tot);return 0;}
0 0
- bzoj 2818: Gcd 线性筛求欧拉函数
- BZOJ 2818 Gcd (线性筛+欧拉函数)
- [BZOJ 2818] Gcd 线性筛+欧拉函数前缀和
- BZOJ 2818 Gcd 线性欧拉
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes筛)
- bzoj 2818 Gcd 欧拉函数
- bzoj 2818 Gcd 【欧拉函数】
- [BZOJ 2818] gcd · 欧拉函数
- BZOJ 2818 GCD 欧拉函数
- BZOJ 2818 GCD【欧拉函数】
- 【BZOJ】2818 Gcd 欧拉函数
- bzoj 2818 GCD(欧拉函数)
- bzoj 2818 Gcd 欧拉函数求和
- bzoj 4499: 线性函数
- BZOJ 2818 gcd
- BZOJ 2818 Gcd
- 【BZOJ 2818】 gcd
- bzoj 2818: Gcd
- hibernate用注解 一对多 报Could not determine type for错误
- Android触摸事件的ACTION
- Problem List
- 查看虚拟机运行时间
- [Leetcode] Peeking Iterator
- bzoj 2818: Gcd 线性筛求欧拉函数
- 读thinking in java笔记(九):内部类
- Gulp 自动化你的前端
- POJ 1753 Flip Game(枚举+回溯法)
- POJ 3311 Hie with the Pie TSP问题 -
- Nginx源码分析 - Event事件篇 - Event模块的进程初始化ngx_event_process_init
- Linux 基础学习
- day14_字典
- 虚拟机开新端口