当前位置: 首页 > news >正文

POJ-2689 Prime Distance(区间素数筛--经典题)

题意:

给出一个区间[L, R],求该区间内的所有素数(1 <= L,R <= 2.1E9, R-L <= 1e6)

思路:

区间素数筛,枚举不超过sqrt(R)的所有质数p,然后再去枚举[L, R]区间内p的倍数,将之划去,最后区间内剩下的就都是素数了。注意一点,1需要特判不是素数。


代码:

#include <algorithm>
#include <string.h>
#include <cstdio>
#define LL long long
using namespace std;
const int N = 1e5;
const int maxn = 1e6+5;
int isprime[maxn], prime[maxn], len;
LL L, R;
int ans[maxn];
void prime_init()
{
	len = 0;
	memset(isprime, 0, sizeof isprime);
	for(int i = 2; i <= N; ++i)
	if(!isprime[i])
	{
		prime[++len] = i;
		if(1ll*i*i > N) continue;
		for(int j = i*i; j <= N; j+=i)
		isprime[j] = 1;
	}
}
void work()
{
	memset(ans, 0, sizeof ans);
	for(int i = 1; i <= len; ++i)
	{
		if(1ll*prime[i]*prime[i] > R) break;
		LL star = ((L-1)/prime[i]+1)*prime[i];
		for(LL j = star; j <= R; j+=prime[i])
		if(j != prime[i]) ans[j-L+1] = 1;
	}
	if(L == 1) ans[1] = 1;
}
int main()
{
	prime_init();
	while(~scanf("%lld %lld", &L, &R))
	{
		work();
		LL i, mins, maxx, ans1, ans2, ans3, ans4;
		ans1 = ans2 = -1, i = 0;
		while(i < R-L+1 && (ans1 == -1 || ans2 == -1))
		{
			++i;
			if(ans[i]) continue;
			if(ans1 == -1) ans1 = i+L-1;
			else if(ans2 == -1) ans2 = i+L-1;
		}
		if(ans1 == -1 || ans2 == -1) puts("There are no adjacent primes.");
		else
		{
			mins = maxx = ans2-ans1;
			ans3 = ans1, ans4 = ans2;
			int pre = ans2;
			for(++i; i <= R-L+1; ++i)
			{
				if(ans[i]) continue;
				if(i+L-1-pre < mins)
				{
					mins = i+L-1-pre;
					ans1 = pre, ans2 = i+L-1;
				}
				if(i+L-1-pre > maxx)
				{
					maxx = i+L-1-pre;
					ans3 = pre, ans4 = i+L-1;
				}
				pre = i+L-1;
			}
			printf("%lld,%lld are closest, %lld,%lld are most distant.\n", ans1, ans2, ans3, ans4);
		}
	}
	return 0;
}


继续加油~

相关文章:

  • c语言移位操作
  • HDU-6069 Counting Divisors - 2017 Multi-University Training Contest - Team 4(分解质因子区间筛法)
  • HDU-6073 Matching In Multiplication - 2017 Multi-University Training Contest - Team 4(拓扑+连通块处理)
  • 我的Java开发学习之旅------Java经典排序算法之插入排序
  • POJ-3352 Road Construction(边双连通分量+缩点)
  • 445port入侵详细解释
  • UVALive-5013 Similarity(二分图最大权匹配)
  • Cisco ASA-ASA 8.2-L2L ***
  • HDU-3440 House Man(差分约束系统)
  • 怎么安装docker registry
  • HDU-3666 THE MATRIX PROBLEM(差分约束系统判断存在与否+特殊剪枝)
  • Thinkphp学习04
  • HDU-4315 Climbing the Hill(阶梯博弈变形)
  • HDU-5724 Chess(SG函数+状压)
  • Randy Shoup与Andrew Phillips对微服务方面问题的解答
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【刷算法】从上往下打印二叉树
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • javascript 总结(常用工具类的封装)
  • Java精华积累:初学者都应该搞懂的问题
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Linux中的硬链接与软链接
  • PhantomJS 安装
  • php的插入排序,通过双层for循环
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 悄悄地说一个bug
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 深度学习入门:10门免费线上课程推荐
  • 首页查询功能的一次实现过程
  • 王永庆:技术创新改变教育未来
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 新手搭建网站的主要流程
  • 回归生活:清理微信公众号
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​虚拟化系列介绍(十)
  • #if 1...#endif
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (3)nginx 配置(nginx.conf)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)hibernate配置管理
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (循环依赖问题)学习spring的第九天
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转载)Linux网络编程入门
  • .NET Core Web APi类库如何内嵌运行?
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ JavaScript ] JSON方法
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [52PJ] Java面向对象笔记(转自52 1510988116)