博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2689(素数区间筛法模板)
阅读量:5099 次
发布时间:2019-06-13

本文共 2138 字,大约阅读时间需要 7 分钟。

题目链接:

 

题意: 给出一个区间 [l, r] 求其中相邻的距离最近和最远的素数对 . 其中 1 <= l <  r <= 2,147,483,647, r - l <= 1e6 .

 

思路: 素数区间筛

要找到 [l, r] 中相邻最近和最远的素数对肯定是需要找出 [l, r] 内所有素数 . 但是无论是直接线性打表还是暴力都处理不了这么大的数据 .

可以先给 sqrt(r) 内的素数打个表, 再用 sqrt(r) 内的素数去筛选 [l, r] 内的合数, 然后再遍历一次 [l, r], 记录答案即可 .

 

代码:

1 #include 
2 #include
3 #include
4 #define ll long long 5 using namespace std; 6 7 const int MAXN = 1e6 + 10; 8 const int MAX = 1e5; 9 int prime[MAX], tag[MAX], vis[MAXN], tot;10 11 void get_prime(void){12 for(int i = 2; i < MAX; i++){13 if(!tag[i]){14 prime[tot++] = i;15 for(int j = 2; j * i < MAX; j++){16 tag[j * i] = 1;17 }18 }19 }20 }21 22 ll Max(ll a, ll b){23 return a > b ? a : b;24 }25 26 int main(void){27 get_prime();28 ll l, r;29 while(~scanf("%lld%lld", &l, &r)){30 memset(vis, 0, sizeof(vis));31 for(int i = 0; i < tot; i++){32 ll a = (l + prime[i] - 1) / prime[i];33 ll b = r / prime[i];34 for(int j = Max(2, a); j <= b; j++){ // 筛[l, r]内的合数35 vis[prime[i] * j - l] = 1; //减个l方便标记,输出答案时加回去即可36 }37 }38 if(l == 1) vis[0] = 1; // 注意这个1并不是素数39 ll cnt = -1, sol1 = MAXN, sol2 = 0, x1, y1, x2, y2;40 for(int i = 0; i <= r - l; i++){41 if(vis[i] == 0){42 if(cnt != -1){43 if(sol1 > i - cnt){44 x1 = cnt;45 y1 = i;46 sol1 = i - cnt;47 }48 if(sol2 < i - cnt){49 x2 = cnt;50 y2 = i;51 sol2 = i - cnt;52 }53 }54 cnt = i;55 }56 }57 if(sol2 == 0) puts("There are no adjacent primes.");58 else printf("%lld,%lld are closest, %lld,%lld are most distant.\n", x1 + l, y1 + l, x2 + l, y2 + l);59 }60 return 0;61 }
View Code

 

转载于:https://www.cnblogs.com/geloutingyu/p/7289454.html

你可能感兴趣的文章
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
getElement的几中属性介绍
查看>>
STL容器之vector
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
python3 生成器与迭代器
查看>>
git .gitignore 文件不起作用
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
cer证书签名验证
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
小算法
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>