题意:给定n,求gcd(x,y)==p 的对数,其中(1<=x<y<n)

思路:

(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, 1 <= x, y <= n/k的对数!所以,枚举每个质数p(线性筛素数的方法见:线性时间内筛素数和欧拉函数),然后求(x, y) = 1, 1 <= x, y <= n/p的个数。

(x, y) = 1的个数如何求呢?其实就是求互质的数的个数。在[1, y]y互质的数有phi(y)个,如果我们令x < y,那么答案就是sigma(phi(y))。因为x, y是等价的,所以答案*2,又因为(1, 1)只有一对,所以-1。最终答案为sigma(sigma(phi(n/prime[i])) * 2 - 1)

参考:https://oi.abcdabcd987.com/eight-gcd-problems/

code:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
#include <cmath>
#include <vector>
using namespace std;
using namespace std;
typedef long long ll;
const int N = 10000005;
const ll maxn=1e18+100;
int n,len;
int p[N],phi[N];
bool vis[N];int main()
{scanf("%d",&n);len=0;for (int i=2;i<=n;i++){if (!vis[i]){p[len++]=i;phi[i]=i-1;}for (int j=0;j<len&&i*p[j]<=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; }}}phi[1]=1;for (int i=2;i<=n;i++) phi[i]+=phi[i-1];ll ans=0;for (int i=0;i<len;i++) ans+=phi[n/p[i]]*2-1;printf("%lld",ans);
}

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

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

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

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

  7. HYSBZ 2818 Gcd

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

  8. bzoj 2818 欧拉函数

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

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

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

最新文章

  1. R 语言 download.file 的几点知识
  2. 【推导】【线段树】hdu5929 Basic Data Structure
  3. 彻底解决Webpack打包慢的问题
  4. 零基础学编程学java还是python-零基础学编程,Java和Python你pick谁?
  5. 深度学习模型之各种caffe版本(Linux和windows)的网址
  6. NIPS 2018 论文解读集锦(11月28日更新)
  7. boost::synchronized_value相关的测试程序
  8. 找call的万能方法,一招通杀所有网络游戏【个人实践出来的】
  9. 特斯拉副总裁陶琳:Model Y 本月开始陆续交付
  10. TensorFlow tf.keras.losses.SparseCategoricalCrossentropy
  11. 在Windows 7中搭建Wordpress环境
  12. Android studio: 自 maven 增加一個函式庫
  13. Font Awesome入门教程
  14. 软件开发的流程和常用模式
  15. android screenshot流程,APP中,Screenshot的设计要领和各发布渠道的要求
  16. mpls工作原理通俗解释_MPLS的工作原理
  17. U3D DotH教程3
  18. 全球及中国DIN 2353压缩配件行业研究及十四五规划分析报告
  19. windows7 中pkeyconfig.xrm-ms文件无法删除解决办法
  20. 电脑网络重置后如何连接网络

热门文章

  1. Vue解析--如何应对面试官提问
  2. 学习关于display :flex 布局问题!
  3. 反射例子(配置文件)
  4. BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
  5. class threading.Thread()说明:
  6. -bash: belts.awk: command not found
  7. 转:只能选择GridView中的一个CheckBox(单选CheckBox)
  8. 一款jQuery立体感动态下拉导航菜单特效
  9. Java 队列清空,如何清空Actor死信队列 - java
  10. 山东理工大学计算机学院学号,计算机组成原理课程设计--山东理工大学计算机学院...