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 ...
随机推荐
- 20 个 .NET 6 新增的 API
DateOnly & TimeOnly .NET 6 引入了两种期待已久的类型 - DateOnly 和 TimeOnly, 它们分别代表DateTime的日期和时间部分. DateOnly ...
- shell脚本 系统信息检测
一.简介 源码地址 日期:2018/4/12 介绍:根据指令展示不同的系统数据 效果图: 二.使用 适用:centos6+ 语言:中文 注意:无 下载 wget https://raw.githubu ...
- 配置yum代理
一.说明 很多内网环境无法使用yum 二.配置 1.安装nginx 2.配置 server { listen 808; #禁用multipart range功能 max_ranges 1; serve ...
- mysql的事务详解
事务及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性. 原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执 ...
- RocketMQ源码详解 | Broker篇 · 其五:高可用之主从架构
概述 对于一个消息中间件来讲,高可用功能是极其重要的,RocketMQ 当然也具有其对应的高可用方案. 在 RocketMQ 中,有主从架构和 Dledger 两种高可用方案: 第一种通过主 Brok ...
- Table.Range保留中间指定的….Range/Middle(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- .NET Core基础篇之:白话管道中间件
在.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景区很远 ...
- 云主机tracert外网无返回需在安全组入方向加ICMP Time Exceeded TTLexpired in transit
- react Input 表单
input react 表单 input 密码框在谷歌浏览器下 会有黄色填充 官网的不太用,这个比较好用 type="password" autoComplete=" ...
- .net 程序通过 crontab 无法启动,手动执行脚本可以启动
一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...