牛客第三场多校 H Diff-prime Pairs
链接:https://www.nowcoder.com/acm/contest/141/H
来源:牛客网
Eddy tried to solve it with inclusion-exclusion method but failed. Please help Eddy to solve this problem.
Note that pair (i1, j1) and pair (i2, j2) are considered different if i1 ≠ i2 or j1 ≠ j2.
输入描述:
Input has only one line containing a positive integer N. 1 ≤ N ≤ 10
7
输出描述:
Output one line containing a non-negative integer indicating the number of diff-prime pairs (i,j) where i, j ≤ N
输入
3
输出
2
输入
5
输出
复制
6 题意:输入一个n,n里面选一对数,满足这两个式子的数都是素数,不同顺序也算是另一对 思路:我们会发现i,j都是素数的话,那么最大公约数为1,那么肯定是一对,然后我们再想想(6,10),(6,9)...都是那么他们有什么规律呢,就是我们要使除了两个数的最大公约数之后都是素数,那么说明两个数分解之后就应该是 a=(素数)x*n b=(素数)y*nn是最大公约数那么其他的满足这个条件对数其实就是一个素数对,同时乘以一个数那么也是,例如(2,3)那么(4,6)(6,9)(8,12)都是满足条件的数,那么我们应该怎么计算呢,下面我们讲个例子 首先想10以内有几个3的倍数呢,10/3=3个,这是常识那么我们就来计算,由所有的素数对扩展10以内的所有对,因为我们首先应该找出素数对,所以我们应该是遍历所有的素数,第一个 2 :10/2=5,10以内有5个2的倍数,我们再看2的前面有没有素数,没有,不计算第二个 3 :10/3=3 ....3 6 9,前面有素数2,我们就可以找到素数2组成(2,3),然后两个数同时乘以2,3,因为前面的小,所以我们始终能在6 9 前面找到4 6组成(4,6)(6,9)第三个:5...第四个:7...
下面看代码实现
#include<bits/stdc++.h> #define fi first #define ll long long #define pll pair<int,int> #define se second #define mod 1000000007 using namespace std; const int maxn = 10000010; bool isPrime[maxn]; ll prime[maxn]; ll sum[maxn]; ll add[maxn]; ll total=0; map< pll ,int> mp; void makePrime2()//筛法找出所有的素数 {memset(isPrime,true,sizeof(isPrime));memset(prime,0,sizeof(prime));sum[1]=0;for(int i=2; i<maxn; i++){if(isPrime[i]){prime[total++]=i;sum[i]=sum[i-1]+1;//用于存当前位置有多少个素数}else sum[i]=sum[i-1];for(int j=0; j<total && i*prime[j]<maxn; j++){isPrime[i*prime[j]]=false;if(i%prime[j]==0) break;}} } int main() {makePrime2();ll n;scanf("%lld",&n);ll ans=0;for(int i=0; i<total&&prime[i]<=n; i++){int p=n/prime[i];//找出n以内有多少个素数prime[i]的倍数ans+=(sum[prime[i]]-1)*p;//-1因为本身这个素数不算,然后和前面的素数进行匹配与扩展}printf("%lld\n",ans*2); }
转载于:https://www.cnblogs.com/Lis-/p/9374618.html
牛客第三场多校 H Diff-prime Pairs相关推荐
- Gemstones(牛客第八场多校)
链接:https://ac.nowcoder.com/acm/contest/888/G 来源:牛客网 Gromah and LZR have entered the seventh level. T ...
- 牛客第三场 F Popping Balloons —— 思维 + 搞题
题目链接:点我啊╭(╯^╰)╮ 题目大意: 二维平面,nnn 个气球 要求水平方向射三枪,垂直射三枪 每一枪可以打穿一行或一列的所有气球 水平或垂直的相邻枪的距离为 rrr ...
- 牛客网第九场多校联赛 E Music Game
题目链接:https://www.nowcoder.com/acm/contest/147/E 题目大意:给出长度为n的序列a,表示每个点成功的概率,从1到n的分数计算方法是,若成功则获得连续成功的长 ...
- 牛客网暑期ACM多校训练营(第三场)
牛客网暑期ACM多校训练营(第三场) A. PACM Team 01背包,输出方案,用bool存每种状态下用的哪一个物品,卡内存.官方题解上,说用char或者short就行了.还有一种做法是把用的物品 ...
- 牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph
牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph 做法:\(G'\) 中的对应原图两条边(a,b) (c,d)的最短路为: \[ w[a][b] + w[c][d] ...
- 牛客网暑期ACM多校训练营(第九场)
牛客网暑期ACM多校训练营(第九场) A. Circulant Matrix 做法:看到下标 \(xor\) 这种情况就想 \(FWT\),可是半天没思路,于是放弃了..其实这个 \(n\) 疯狂暗示 ...
- 牛客网暑期ACM多校训练营(第五场)
牛客网暑期ACM多校训练营(第五场) A. gpa 二分答案,然后就转化为是否满足 \(\frac {\sum s[i]c[i]}{\sum s[i]} ≥ D\), \(\sum s[i]c[i] ...
- 牛客网暑期ACM多校训练营(第一场)
牛客网暑期ACM多校训练营(第一场) A. Monotonic Matrix 考虑0和1的分界线,1和2的分界线,发现问题可以转化为两条不互相穿过的路径的方案数(可重叠),题解的做法就是把一条路径斜着 ...
- 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum
链接:https://www.nowcoder.com/acm/contest/148/D 来源:牛客网 题目描述 Prefix Sum is a useful trick in data struc ...
最新文章
- 编写里Linux命令解释器,linux基础教程试卷及答案
- 深度解析Java可变参数类型以及与数组的区别
- 关于javascript中的回调函数
- Burpsuite技巧之MD5加密密码爆破、带验证码爆破
- 上财的计算机专业408,【2020考研】上财408分经验分享
- Docker中安装Jenkins实时发布.net core 项目(二)
- 【2017年第1期】基于文本大数据的企业信用风险评估
- 再谈正态分布或高斯函数
- [译][Tkinter 教程15] event 事件绑定
- Java 开发人员必备的开发工具,这些没用进BAT想都别想
- GreenDao的学习和使用
- tomcat容器启动
- html文件用excel打开乱码,都是兼容惹的祸 用excel打开xls文件出现乱码的解决方法...
- 电子邮件群发工资条的方法
- win10电脑IIS服务器配置ASP环境
- html中如何把两行合并单元格,css合并两列单元格内容
- win10自带sftp服务器_win10开启sftp服务器
- 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?
- 互联网日报 | 蔚来汽车股价年内涨幅近十倍;小米成立可穿戴部;恒大物业拟12月2日港交所上市...
- 一篇文章带你弄懂乐观锁与悲观锁,CAS原子性,synchronized底层原理