2818: Gcd
题目链接
时间限制: 10 Sec 内存限制: 256 MB
提交: 7355 解决: 3268
题目描述
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.

输入
一个整数N

输出
如题

样例输入
4

样例输出
4
提示

对于样例(2,2),(2,4),(3,3),(4,2)

1<=N<=10^7

来源
湖北省队互测

题解
一道数论的小题。
首先,为了方便思考,我们先设 x<=y。
由于 gcd(x,y) = p(p为素数),假如 a*p=x,b*p=y 那么 gcd(a,b) = 1。
也就是求 ∑ny=1φ(y/pi)∑y=1nφ(y/pi)\sum_{y=1}^nφ(y/p_i) 其中 pi≤ypi≤yp_i ≤ y 且为质数。

如果用来枚举,那么真是太慢了。由于 y 的取值为 [1,n][1,n][1,n],所以 y/piy/piy/p_i 的取值为 [1,⌊n/pi⌋][1,⌊n/pi⌋][1,⌊ n/p_i⌋ ]。
也就是对于每个 pipip_i 累计 ∑⌊y/pi⌋k=1φ(k)∑k=1⌊y/pi⌋φ(k)\sum_{k=1}^{⌊y/p_i⌋}φ(k),所以我们可以对存 φ(i)φ(i)φ(i) 的数组求前缀和。(φ(i)φ(i)φ(i)必然要用线性筛来求)

又因为 x和y 的位置可以互换,所以对于每个 pipip_i 的 ∑⌊y/pi⌋k=1φ(k)∑k=1⌊y/pi⌋φ(k)\sum_{k=1}^{⌊y/p_i⌋}φ(k) 要 × 2 然后扣掉 x=yx=yx=y 的情况数。
此时对于每个 pipip_i 求的 ∑⌊y/pi⌋k=1φ(k)∑k=1⌊y/pi⌋φ(k)\sum_{k=1}^{⌊y/p_i⌋}φ(k) 等价为 gcd(x,y) = p[i] 的情况数。
所以 gcd(x,y) = p[i] 当且仅当 x = y = p[i] 的时候,所以只需扣去 1 就可以了。

这道题在解法上给人带来一点启发:此类题目,求某种关系的数对时,我们可以尝试着把它们转化为互质关系,然后利用欧拉函数来求。

代码

#include<cstdio>
const int maxn=1e7+5;
int n,p[maxn];
bool vis[maxn];
long long ans,phi[maxn];
void xianxingshai()
{vis[1]=1;phi[1]=1;for (int i=2;i<=n;i++){if (!vis[i]) {p[++p[0]]=i;phi[i]=i-1;}for (int j=1;j<=p[0]&&(long long)p[j]*i<=n;j++){vis[i*p[j]]=1;if (i%p[j]) phi[i*p[j]]=phi[i]*(p[j]-1);else {phi[i*p[j]]=phi[i]*p[j];break;}}}
}
int main()
{scanf("%d",&n);xianxingshai();ans=0;for (int i=1;i<=n;i++) phi[i]+=phi[i-1];for (int i=1;i<=p[0];i++) ans+=(phi[n/p[i]]<<1)-1;printf("%lld",ans);return 0;
}

bzoj-2818 Gcd相关推荐

  1. 欧拉筛(bzoj 2818: Gcd)

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 6707  Solved: 2952 [Submit][Status][Discu ...

  2. BZOJ 2818: Gcd 筛法

    2818: Gcd 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2818 Description 给定整数N,求1<=x,y< ...

  3. BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)

    传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Dis ...

  4. BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)

    标题效果:定整N(N <= 1e7),乞讨1<=x,y<=N和Gcd(x,y)素数的数(x,y)有多少.. 思考:推,. 建立gcd(x,y) = p,然后,x / p与y / p互 ...

  5. BZOJ 2818——Gcd

    题意:给定n,求gcd(x,y)==p 的对数,其中(1<=x<y<n) 思路: 求(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, ...

  6. BZOJ 2818 Gcd

    传送门 题解:设p为素数 ,则gcd(x/p,y/p)=1也就是说求 x/p以及 y/p的欧拉函数.欧拉筛+前缀和就可以解决 #include <iostream> #include &l ...

  7. HYSBZ - 2818 Gcd —— 莫比乌斯反演

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 8172  Solved: 3609 Description 给定整数N,求1&l ...

  8. HYSBZ 2818 Gcd

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sa ...

  9. bzoj 2818 欧拉函数

    思路:就是对于某个数q,跟他互质的数p,kp和kq的最大公约数是k,那么这个数能组成的答案的数量就是phi[i]乘以某个质数,且乘积小于n 基于这种思路写下这个代码 #include <cstd ...

  10. 最大公约数gcd函数简介

    gcd函数简介 最大公因数(英语:highest common factor,hcf)也称最大公约数(英语:greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大 ...

最新文章

  1. 是什么让数据科学家从优秀变得伟大?
  2. Case when then esle end
  3. sql 199标准 连接查询
  4. java oracle 图片_JAVA读取Oracle中的blob图片字段并显示
  5. 绝对好文:嵌入式系统的软件架构设计!
  6. 264分析两大利器:264VISA和Elecard StreamEye Tools
  7. XenServer 6.5实战系列之十一:Install Update For XenServer 6.5
  8. 艾伟_转载:扩展方法 之 基本数据篇
  9. KEIL C51 程序编译
  10. (附源码)基于spring boot 青少年公共卫生教育平台的设计与实现 毕业设计 643214
  11. 给你一台大疆无人机,你能用来做点啥?(一)----------获取正射影像
  12. php实现的几种基本算法
  13. 利用全加器实现7段数码管_简单共阴极数码管电路图大全(CD4511/段译码/驱动器)...
  14. 在虚拟机上使用Ghost备份/恢复操作系统
  15. 2021年R1快开门式压力容器操作考试题库及R1快开门式压力容器操作考试APP
  16. 有趣的歌单昵称_抖音最火的10大神曲 你的歌单里面有几首
  17. php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)_PHP教程
  18. C语言fclose函数了解
  19. 数据结构之排序-希尔排序
  20. HDU 1728 逃离迷宫

热门文章

  1. 验房师专用验房项目验收内容
  2. UI设计——以网易云音乐为例
  3. tp5系统常量对应的目录路径
  4. html5 特效框架,超级惊艳 10款HTML5动画特效推荐
  5. C#渐变色方法 实例
  6. 怎样利用腾讯云或者腾讯云主机搭建自己的网站
  7. 关于微信公众号文章编辑器不能直接编辑html样式的处理方法
  8. Windows电脑如何查看内存条配置
  9. 清算(清分)与结算的区别
  10. 2018 中国人口研究,净增长500多万人。5年后注定人口负增长