bzoj-2818 Gcd
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相关推荐
- 欧拉筛(bzoj 2818: Gcd)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 6707 Solved: 2952 [Submit][Status][Discu ...
- BZOJ 2818: Gcd 筛法
2818: Gcd 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2818 Description 给定整数N,求1<=x,y< ...
- BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)
传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Dis ...
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
标题效果:定整N(N <= 1e7),乞讨1<=x,y<=N和Gcd(x,y)素数的数(x,y)有多少.. 思考:推,. 建立gcd(x,y) = p,然后,x / p与y / p互 ...
- BZOJ 2818——Gcd
题意:给定n,求gcd(x,y)==p 的对数,其中(1<=x<y<n) 思路: 求(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, ...
- BZOJ 2818 Gcd
传送门 题解:设p为素数 ,则gcd(x/p,y/p)=1也就是说求 x/p以及 y/p的欧拉函数.欧拉筛+前缀和就可以解决 #include <iostream> #include &l ...
- HYSBZ - 2818 Gcd —— 莫比乌斯反演
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 8172 Solved: 3609 Description 给定整数N,求1&l ...
- HYSBZ 2818 Gcd
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sa ...
- bzoj 2818 欧拉函数
思路:就是对于某个数q,跟他互质的数p,kp和kq的最大公约数是k,那么这个数能组成的答案的数量就是phi[i]乘以某个质数,且乘积小于n 基于这种思路写下这个代码 #include <cstd ...
- 最大公约数gcd函数简介
gcd函数简介 最大公因数(英语:highest common factor,hcf)也称最大公约数(英语:greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大 ...
最新文章
- 是什么让数据科学家从优秀变得伟大?
- Case when then esle end
- sql 199标准 连接查询
- java oracle 图片_JAVA读取Oracle中的blob图片字段并显示
- 绝对好文:嵌入式系统的软件架构设计!
- 264分析两大利器:264VISA和Elecard StreamEye Tools
- XenServer 6.5实战系列之十一:Install Update For XenServer 6.5
- 艾伟_转载:扩展方法 之 基本数据篇
- KEIL C51 程序编译
- (附源码)基于spring boot 青少年公共卫生教育平台的设计与实现 毕业设计 643214
- 给你一台大疆无人机,你能用来做点啥?(一)----------获取正射影像
- php实现的几种基本算法
- 利用全加器实现7段数码管_简单共阴极数码管电路图大全(CD4511/段译码/驱动器)...
- 在虚拟机上使用Ghost备份/恢复操作系统
- 2021年R1快开门式压力容器操作考试题库及R1快开门式压力容器操作考试APP
- 有趣的歌单昵称_抖音最火的10大神曲 你的歌单里面有几首
- php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)_PHP教程
- C语言fclose函数了解
- 数据结构之排序-希尔排序
- HDU 1728	逃离迷宫