poj2689Prime Distance
这题……一开始没想到 后来
题意就是求区间素数对最大和最小距离
发现必须处理所有素数
复杂度要求是O(n)~O(nlgn)
考虑分开求质数和合数 其实就是筛法筛合数
最后遍历一遍找最大最小值即可
然后这个方法筛素数到R½就可以了
也就是50000(WA是写的40000……)
Time cost:55min
Code:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<queue> 6 #include<vector> 7 #define ms(a,b) memset(a,b,sizeof a) 8 #define rep(i,a,n) for(int i = a;i <= n;i++) 9 #define per(i,n,a) for(int i = n;i >= a;i--) 10 #define inf 2147483647 11 using namespace std; 12 typedef long long ll; 13 ll read() { 14 ll as = 0,fu = 1; 15 char c = getchar(); 16 while(c < '0' || c > '9') { 17 if(c == '-') fu = -1; 18 c = getchar(); 19 } 20 while(c >= '0' && c <= '9') { 21 as = as * 10 + c - '0'; 22 c = getchar(); 23 } 24 return as * fu; 25 } 26 const int N = 100005; 27 //head 28 ll l,r; 29 ll mindiv[N],prime[N]; 30 int top; 31 void initprime(int n) { 32 rep(i,2,n) { 33 if(!mindiv[i]) prime[++top] = i; 34 for(int j = 1;j <= top && i * prime[j] <= n;j++) { 35 mindiv[prime[j] * i] = prime[j]; 36 if(i % prime[j] == 0) break; 37 } 38 } 39 } 40 41 int flag[N<<4],tot; 42 43 int main() { 44 initprime(50000); 45 while(~scanf("%lld%lld",&l,&r)) { 46 tot++; 47 if(l == 1) l++; 48 rep(i,1,top) { 49 if(prime[i] * prime[i] > r) break; 50 rep(j,(l+prime[i]-1)/prime[i],r/prime[i]) 51 if(j > 1) flag[j * prime[i] - l] = tot; 52 } 53 ll minn = 10000007,maxx = 0; 54 ll minid[2],maxid[2]; 55 ll cur = 0,curr = 0; 56 rep(i,l,r) { 57 if(flag[i-l] == tot) continue; 58 cur = curr,curr = i; 59 if(!cur) continue; 60 if(curr - cur < minn) minn = curr - cur,minid[0] = cur,minid[1] = curr; 61 if(curr - cur > maxx) maxx = curr - cur,maxid[0] = cur,maxid[1] = curr; 62 } 63 if(!maxx) puts("There are no adjacent primes."); 64 else printf("%lld,%lld are closest, %lld,%lld are most distant.\n",minid[0],minid[1],maxid[0],maxid[1]); 65 } 66 return 0; 67 }
转载于:https://www.cnblogs.com/yuyanjiaB/p/9777684.html
poj2689Prime Distance相关推荐
- POJ2689-Prime Distance【质数,数论】
正题 题目链接:http://poj.org/problem?id=2689 题目大意 求闭区间[L,R][L,R][L,R]中相邻的最远和最近的两个质数. 解题思路 我们可以用前R−−√个质因子筛这 ...
- 2018 Google kickstart Problem A. Planet Distance
题目描述 Small dataset 3 ≤ N ≤ 30. Large dataset 3 ≤ N ≤ 1000.input 2 5 1 2 2 3 3 4 2 4 5 3 3 1 2 3 2 1 ...
- 字符串编辑距离(Edit Distance)
一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...
- Levenshtein distance 编辑距离算法
这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算 ...
- 【leetcode】1030. Matrix Cells in Distance Order
题目如下: We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), whe ...
- leetcode Edit Distance
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051082.html 题目链接:leetcode Edit Distance 最短编辑距离, ...
- 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 点云距离度量:完全解析EMD距离(Earth Mover's Distance)
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨刘昕宸@知乎 来源丨https://zhuanlan.zhihu.com/p/270675634 ...
- R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离、dist函数计算矩阵中两两元素的曼哈顿距离
R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离.dist函数计算矩阵中两两元素的曼哈顿距离 目录 R语言计算曼哈顿距离(Manhattan Distance ...
最新文章
- 利用被入侵的路由器迈入内网——抓包,利用路由器漏洞入侵,进行流量劫持...
- opencv mat 修改_OpenCV中initUndistortRectifyMap函数存在bug原因探究
- Redis数据持久化之AOF持久化
- 建立代理,而不是框架
- 中缀表达式转换为前缀或后缀表达式的手工做法
- MYSQL 源代码编绎脚本
- ubuntu16.04安装wordpress
- 使用HanLP分词时,词性标注错误的问题
- C++ 把引用作为函数参数
- 推荐阅读投资理财经典55本
- 「深度小课堂」如何开发一款属于自己的时尚屏保应用?
- ❤️PPT素材网站推荐❤️让你的PPT更加迷人❤️
- 高淇java_关于高淇JAVA中SORM总结学习笔记详细个人解释
- 软件工程导论复习之可行性研究
- 免费手机号码归属地查询接口
- 法语语法学习笔记——代词(1)
- [UOJ#454][UER#8]打雪仗
- 真香,如何关闭微信朋友圈的广告
- 4. 自动封IP和解IP
- 自动化爬取淘宝数据--(保存到文本中)