POJ 2689 - Prime Distance - [埃筛]
题目链接:http://poj.org/problem?id=2689
Time Limit: 1000MS Memory Limit: 65536K
Description
Your program is given 2 numbers: L and U (1<=L< U<=2,147,483,647), and you are to find the two adjacent primes C1 and C2 (L<=C1< C2<=U) that are closest (i.e. C2-C1 is the minimum). If there are other pairs that are the same distance apart, use the first pair. You are also to find the two adjacent primes D1 and D2 (L<=D1< D2<=U) where D1 and D2 are as distant from each other as possible (again choosing the first pair if there is a tie).
Input
Output
Sample Input
2 17
14 17
Sample Output
2,3 are closest, 7,11 are most distant.
There are no adjacent primes.
题意:
给出 $st$ 与 $ed$ ($1 \le st < ed \le 2147483647$ 且 $ed - st \le 1e6$),求 $[st,ed]$ 区间内,相邻的两个素数中,差最小的和差最大的(若存在差同样大的一对素数,则有先给出最小的一对素数);
题解:
显然,不可能直接去筛 $2147483647$ 以内的素数;
由于任何一个合数 $n$ 必定包含一个不超过 $\sqrt{n}$ 的质因子,
那么,我们不妨先用欧拉筛法筛出 $[0,46341]$ 区间内的素数($46341 \approx \sqrt{2147483647}$);
然后对于每个test case的 $[st,ed]$ 区间,用筛出来的质数再去标记 $[st,ed]$ 内的合数,剩下来的就是质数了。
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
const int maxn=1e6+;
vector<ll> p;
bool vis[maxn]; const int MAX=;
bool noprm[MAX+];
vector<int> prm;
void Erato()
{
noprm[]=noprm[]=;
for(int i=;i<=MAX;i++)
{
if(noprm[i]) continue;
prm.pb(i);
for(int j=i;j<=MAX/i;j++) noprm[i*j]=;
}
} int main()
{
Erato(); ll L,R;
while(cin>>L>>R)
{
for(ll i=L;i<=R;i++) vis[i-L]=;
for(int i=;i<prm.size();i++)
{
ll st=max(2LL,L/prm[i]+(L%prm[i]>)), ed=R/prm[i];
for(ll k=st;k<=ed;k++) vis[k*prm[i]-L]=;
}
if(L==) vis[]=; p.clear();
for(ll i=L;i<=R;i++) if(!vis[i-L]) p.pb(i);
if(p.size()<=) cout<<"There are no adjacent primes.\n";
else
{
int mn=, mx=;
for(int i=;i<p.size();i++)
{
if(p[i]-p[i-]<p[mn]-p[mn-]) mn=i;
if(p[i]-p[i-]>p[mx]-p[mx-]) mx=i;
}
printf("%I64d,%I64d are closest, %I64d,%I64d are most distant.\n",p[mn-],p[mn],p[mx-],p[mx]);
}
}
}
POJ 2689 - Prime Distance - [埃筛]的更多相关文章
- POJ - 2689 Prime Distance (区间筛)
题意:求[L,R]中差值最小和最大的相邻素数(区间长度不超过1e6). 由于非素数$n$必然能被一个不超过$\sqrt n$的素数筛掉,因此首先筛出$[1,\sqrt R]$中的全部素数,然后用这些素 ...
- poj 2689 Prime Distance(大区间素数)
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...
- poj 2689 Prime Distance (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
- 数论 - 素数的运用 --- poj 2689 : Prime Distance
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12512 Accepted: 3340 D ...
- POJ 2689.Prime Distance-区间筛素数
最近改自己的错误代码改到要上天,心累. 这是迄今为止写的最心累的博客. Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total S ...
- [ACM] POJ 2689 Prime Distance (筛选范围大素数)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12811 Accepted: 3420 D ...
- poj 2689 Prime Distance(区间筛选素数)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9944 Accepted: 2677 De ...
- 题解报告:poj 2689 Prime Distance(区间素数筛)
Description The branch of mathematics called number theory is about properties of numbers. One of th ...
- poj 2689 Prime Distance(大区间筛素数)
http://poj.org/problem?id=2689 题意:给出一个大区间[L,U],分别求出该区间内连续的相差最小和相差最大的素数对. 由于L<U<=2147483647,直接筛 ...
随机推荐
- dubbo配置多个注册中心
用法: <dubbo:registry address="zookeeper://10.0.1.131:2181?backup=10.0.1.132:2181,10.0.1.133:2 ...
- Vue $emit()不触发方法的原因
vue使用$emit时,父组件无法触发监听事件的原因是: $emit传入的事件名称只能使用小写,不能使用大写的驼峰规则命名
- [转]ThreadLocal使用
引言 ThreadLocal的官方API解释为: “该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线 ...
- Cmake find_package 需要指定具体的so
需要使用cmake的find_package将boost库添加到项目中,通过cmake --help-module FindBoost 可以查看cmake引入Boost的帮助信息: 可以看到,Boot ...
- pandas DataFrame apply()函数(2)
上一篇pandas DataFrame apply()函数(1)说了如何通过apply函数对DataFrame进行转换,得到一个新的DataFrame. 这篇介绍DataFrame apply()函数 ...
- golang:常量
今天写代码的时候才发现,go语言里面的常量不能是数组(例如:[2]byte) 于是想查一下资料搞清楚到底是什么原因导致的,从effective go查到如下介绍: 但是这里也仅仅就是介绍了一下常量类型 ...
- [转]Jsoup(一)Jsoup详解(官方)
原文地址:http://www.cnblogs.com/zhangyinhua/p/8037599.html 一.Jsoup概述 1.1.简介 jsoup 是一款Java 的HTML解析器,可 ...
- [转]application.properties详解 --springBoot配置文件
本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...
- ICE简单介绍及使用示例
转自:http://blog.csdn.net/zhu2695/article/details/51494664 1.ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Inte ...
- 和TransDecoder 学习perl 自定义模块的路径问题
TransDecoder 软件是用perl 原因写的,其中包含了一些自定义的模块,通过一个脚本来进行调用,为了能够正常访问自定义的perl 模块, 在其源代码中利用了FindBin 这个模块 use ...