POJ prime distance
https://oj.shiyancang.cn/Problem/781.html
素数距离,数据范围21亿,如果用素数筛存,并且进行做的话,按照x/lnx计算会是一个非常恐怖的复杂度。确定要做什么,首先一定要筛选素数,然后一定要进行素数的比较。问题就在筛选素数这里,可以看到区间范围很小,可以从这里入手,怎么储存,不可能按照那个储存,可以进行离散化,或者偏移,等等注意1的存在,无法被素数筛选掉,注意越界问题,那么就是区间素数筛选,埃氏筛的使用。因为算数基本定理,必然有小于sqrt的素数因子,这是可以接受的。那么sqrt再x、lnx就会很小了,每次一个1e4的复杂度直接解决了,求出a,b.储存上一状态的量,逐一比较即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+520;
const ll INF=0x3f3f3f3f;
ll prime1[N],cnt,prime2[N*10],l,r;
bool st[N*10];
void get_prime(ll n)
{
for(int i=2;i<=n;i++)
{
if(!st[i]) prime1[cnt++]=i;
for(int j=0;prime1[j]<=n/i;j++)
{
st[prime1[j]*i]=1;
if(i%prime1[j]==0) break;
}
}
}
void get_prime2()
{
ll a,b;
memset(st,0,sizeof(st));
for(ll i=0;i<cnt;i++)//要么刚好,要么卡进区间, 但是如果是1的话,那么意味着没有任何一个可以通过素数筛选掉他
{
a=(l-1)/prime1[i]+1,b=r/prime1[i];//向上进位, //prime卡进区间范围内,(l-1)卡进里面去,但是L是从零开始的了
for(ll j=a;j<=b;++j)
{
if(j>1)
{
st[prime1[i]*j-l]=1;
}
} //压缩储存,区间长度很小
}
if(l==1) st[0]=1;
}
void solve ()
{
ll minn=INF,maxn=-INF;
ll minl,minr,maxl,maxr;
get_prime2();
ll p=-1;
for(int i=0;i<=r-l;i++)
{
if(!st[i])//只需要记录前面和后面就可以了
{
if(p!=-1)
{
if(maxn<i-p) maxn=i-p,maxl=p,maxr=i;//类似神奇的幻方,只需要记录前一状态即可
if(minn>i-p) minn=i-p,minl=p,minr=i;
}
p=i;//每次做完都要更新,而不是第一次更新,因为相邻
}
}
//通过状态有没有更新,来判断是否具有结果
if(maxn==-INF)printf("There are no adjacent primes.\n");
else printf("%lld,%lld are closest, %lld,%lld are most distant.\n",minl+l,minr+l,maxl+l,maxr+l);
// if(cnt2<=1) cout<<"There are no adjacent primes.\n";
// else
// {
// for(int i=0;i<cnt2;i++)
// {
// if(prime2[i+1]-prime2[i]<minn)
// {
// minn=prime2[i+1]-prime2[i];
// minl=prime2[i],minnr=prime1[i+1];
// }
// if(prime2[i+1]-prime2[i]>maxn)
// {
// maxn=prime2[i+1]-prime2[i];
// maxl=prime2[i],maxr=prime1[i+1];
// }
// }
// printf("%lld,%lld are closest, %lld,%lld are most distant.\n",minl,minr,maxl,maxr);
// }
}
int main()
{
get_prime(N);
while(~scanf("%lld%lld",&l,&r))solve();
return 0;
}
POJ prime distance的更多相关文章
- poj 2689 Prime Distance(大区间素数)
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...
- 数论 - 素数的运用 --- poj 2689 : Prime Distance
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12512 Accepted: 3340 D ...
- [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 (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
- 一本通1619【例 1】Prime Distance
1619: [例 1]Prime Distance 题目描述 原题来自:Waterloo local,题面详见 POJ 2689 给定两个整数 L,R,求闭区间 [L,R] 中相邻两个质数差值最小的数 ...
- POJ-2689 Prime Distance (两重筛素数,区间平移)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13961 Accepted: 3725 D ...
- UVA 10140 - Prime Distance(数论)
10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...
- POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)
POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...
随机推荐
- jenkins实例 nodejs项目
目录 一.案例1 二.案例2 一.案例1 使用shell方式 #清理上一次版本,拉取新代码 rm -rf /server/admin-web cd /server git clone http://g ...
- mysql的MVCC多版本并发控制机制
MVCC多版本并发控制机制 全英文名:Multi-Version Concurrency Control MVCC不会通过加锁互斥来保证隔离性,避免频繁的加锁互斥. 而在串行化隔离级别为了保证较高的隔 ...
- Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- 搭建ELK日志平台(单机)
系统版本:Ubuntu 16.04.7 LTS 软件架构:Filebeat+Kafka+Logstash+Elasticsearch+Kibana+Nginx 软件版本:Filebeat-7.16.0 ...
- 解决Tomcat10.0.12源码编译问题进而剖析其优秀分层设计架构
概述 Tomcat.Jetty.Undertow这几个都是非常有名实现Servlet规范的应用服务器,Tomcat本身也是业界上非常优秀的中间件,简单可将Tomcat看成是一个Http服务器+Serv ...
- Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)
总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...
- py常用标准库
functools python3中增加了更多工具函数,做业务开发时大多情况下用不到,记录一个比较常用的,给函数或者对象初始化参数 partial函数(偏函数) 把一个函数的某些参数设置默认值,返回一 ...
- c++之sigslot库
关于 本文演示环境: win10 + VS2017 1. demo #include <iostream> #include "sigslot.h" using nam ...
- 【LeetCode】311. Sparse Matrix Multiplication 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 科学计算库numpy 日期 题目地址:https ...
- 【九度OJ】题目1108:堆栈的使用 解题报告
[九度OJ]题目1108:堆栈的使用 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1108 题目描述: 堆栈是一种基本的数据结构.堆 ...