GCD

题面:

  给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.

思路:

  首先两个数gcd(x,y)=p为质数,那么令x=k1*p,y=k2*p,由于是最大公因数,所以有k1k2互质,那么根据每一个p我们可以构造出一些不同的k1k2(k1,k2<=n/p),于是求k1,k2可行组合就变成了求 1~n/p范围之内的互质组数。我们运用欧拉筛同时解决找p和互质组数的问题

  首先解决互质组数的问题。我们设f[i]为1~i中的互质二元组个数。则有递推式:

  f[i]=f[i-1]+2*φ(i)

  因为1~i-1我们已经计算过了,所以考虑当前的i与1~i之间组成的互质二元组个数。很显然的,个数为φ(i).欧拉筛求解。由于二元组无序,所以*2

  在欧拉筛的时候,可以同时求出质数p和φ(i).所以求出答案。

  注意在欧拉筛是从2开始,所以初始化f[1]=1;

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<fstream>
  7. using namespace std;
  8. #define ll long long
  9. ll phi[],prm[],n,cnt,f[];
  10. bool vis[];
  11. inline void findphi(){
  12. phi[]=,prm[]=;
  13. for (ll i=;i<=n;++i)
  14. {
  15. if (!vis[i]) { prm[++cnt]=i, phi[i]=i-; }
  16. for (ll j=;j<=cnt && i*prm[j]<=n;++j)
  17. {
  18. vis[i*prm[j]]=;
  19. if (i%prm[j]==) { phi[i*prm[j]]=phi[i]*prm[j]; break; }
  20. if (i%prm[j]!=) phi[i*prm[j]]=phi[i]*(prm[j]-);
  21. }
  22. f[i]=f[i-]+*phi[i];
  23. }
  24. return;
  25. }
  26. int main(){
  27. cin>>n;
  28. cnt=;
  29. f[]=;
  30. findphi();
  31. ll ans=;
  32. for(int i=;i<=cnt;++i){
  33. ans+=f[n/prm[i]];
  34. }
  35. cout<<ans;
  36. }

[俺们学校的题]伪.GCD的更多相关文章

  1. Stern-Brocot Tree、伪.GCD 副本

    Stern-Brocot Tree.伪.GCD 副本 伪.GCD 问题 1:\(f(a,b,c,n) = \sum_{i=0}^{n} [\frac{ai+b}{c}]\) Case 1: \(a\g ...

  2. [NOIP2009] $Hankson$ 的趣味题 (数论,gcd)

    题目链接 Solution 此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举... 只有50分... 被自己蠢哭... 结论比较浅显: 1.对于两个正整数\(a\),\(b\),设 \(g ...

  3. 【Luogu】P1072Hankson的趣味题(gcd)

    这题真TM的趣味. 可以说我的动手能力还是不行,想到了算法却写不出来.以后说自己数论会GCD的时候只好虚了…… 我们首先这么想. x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x ...

  4. CodeForces 992B Nastya Studies Informatics + Hankson的趣味题(gcd、lcm)

    http://codeforces.com/problemset/problem/992/B  题意: 给你区间[l,r]和x,y 问你区间中有多少个数对 (a,b) 使得 gcd(a,b)=x lc ...

  5. 【题解】洛谷P1072 Hankson的趣味题 (gcd和lcm的应用)

    洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) ( ...

  6. 【HDU5512】 2015沈阳赛区D题 规律题(GCD)

    第一篇博客,就从一个比较简单的题目入手吧! 题目: [HDU5512] 题意: 有n个塔,编号为1~n,  编号为a,b的塔已经维修好,此外其他的塔都需要维修.塔的维修是有顺序的,每次只能维修编号为k ...

  7. noj 2069 赵信的往事 [yy题 无限gcd]

    njczy2010 2069 Accepted 31MS   224K 1351Byte G++ 2014-11-13 13:32:56.0 坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再 ...

  8. 2019CCPC-江西省赛C题 HDU6569 GCD预处理+二分

    Trap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  9. [hackerrank]John and GCD list

    https://www.hackerrank.com/contests/w8/challenges/john-and-gcd-list 简单题,GCD和LCM. #include <vector ...

随机推荐

  1. nRF24L01P数据传输速率

    项目要用nRF24L01P做语音的传输,数据量可想而知. 发送端按照8KHz/s采样率,每次采样双声道,16位深度(2Bytes). 数据量算一下就是8000x2x2=32000(Bytes) nRF ...

  2. Go语言( 流程控制)

    流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”. Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码.降低重复代码而生的结 ...

  3. Kafka 初识

    1.Kafka 是什么? 用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统. 倘若“消息引擎系统“这个词对你来说有点陌生的话,那么“消息队列“.“消息中间件”的提法想必你一定是有所 ...

  4. [洛谷P4213]【模板】杜教筛(Sum)

    题目大意:给你$n$,求:$$\sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i)$$最多$10$组数据,$n\leqslant2^{31}- ...

  5. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 错误解决

    报错信息:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 说明:这段报错信息表示 Map ...

  6. Docker2 docker commit方法镜像制作

    一.前期准备 1.下载一个centos镜像,进入容器,安装wget docker pull centos docker run -it centos bash [root@web1 ~]# docke ...

  7. Oracle数据库中导出某张表到SQL并关联更新

    首先想到查询出结果,然后导出为SQL文件: 先导出表结构 1 在桌面建立对应的sql空文件 2 toos-->export userObjects 3 在对话框中选择你要导出的表 4 勾选上si ...

  8. centos7.5 离线安装ntp服务

    安装 #检查rpm包 rpm -qa | grep ntp #从https://pkgs.org/download/ntp 下载rpm包 ntp-4.2.6p5-28.el7.centos.x86_6 ...

  9. DIY一个Web框架

    一.前言 二.框架结构及实现流程 三.总结 一.前言 当我们了解了Web应用和Web框架,以及HTTP协议的原理之后,我们可以自己动手DIY一个最简单的WEB框架,以加深对Web框架的理解,并为即将学 ...

  10. React Native 开发豆瓣评分(四)集中管理 fetch 数据请求

    豆瓣评分的API接口 接口是从网上查找的,看样子应该是微信小程序里面扣出来的(ua 里面有 wechatdevtools) 接口都需要设置apiKey(054022eaeae0b00e0fc068c0 ...