解题报告:poj2689 Prime Distance
2017-10-03 11:29:20
writer:pprp
来源:kuangbin模板
从已经筛选好的素数中筛选出规定区间的素数
/*
*prime DIstance
*给出一个区间[L,U],找到相邻的距离最近的两个素数的和
*还有距离最远的两个素数
*1 <= L < U <= 2147483647
*区间长度不超过1000000
*就是要筛选出[L,U]之间的素数
*/ #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const int MAXN = 100010;
int prime[MAXN+1]; //找到所有的素数
void getprime()
{
memset(prime,0,sizeof(prime));
for(int i = 2; i <= MAXN ; i++)
{
if(!prime[i])
prime[++prime[0]] = i;
for(int j = 1 ; j <= prime[0]&&prime[j] <= MAXN/i; j++)
{
prime[prime[j]*i] = 1;
if(i%prime[j] == 0)
break;
}
}
}
bool notprime[1000010];
int prime2[1000010]; //找到指定区间内的素数存放到prime2数组中
void getprime2(int L, int R)
{
memset(notprime,0,sizeof(notprime));
if(L < 2)
L = 2;
for(int i = 1; i < prime[0]&&(long long)prime[i]*prime[i] <= R; i++)
{
int S = L/prime[i] + (L%prime[i] > 0);
if(S == 1)
S = 2;
for(int j = S; (long long)j * prime[i]<= R; j++)
{
if((long long)j * prime[i] >= L)
notprime[j*prime[i]-L] = true;
}
}
prime2[0] = 0;
for(int i = 0 ; i <= R-L; i++)
{
if(!notprime[i])
prime2[++prime2[0]] = i + L;
}
}
int main()
{
getprime();
int L, U;
while(scanf("%d%d",&L,&U) == 2)
{
getprime2(L,U); if(prime2[0] < 2)
printf("There are no adjacent primes.\n");
else
{
int x1 = 0, x2 = 100000000, y1 = 0, y2 = 0;
for(int i = 1 ; i < prime2[0]; i++)
{
if(prime2[i+1]-prime2[i] < x2-x1)//找到距离最近的点
{
x1 = prime2[i];
x2 = prime2[i+1];
}
if(prime2[i+1]-prime2[i]>y2-y1)//找到距离最远的点
{
y1 = prime2[i];
y2 = prime2[i+1];
}
}
printf("%d,%d are closest, %d,%d are most distant.\n",x1,x2,y1,y2);
}
}
return 0;
}
解题报告:poj2689 Prime Distance的更多相关文章
- POJ2689 Prime Distance(数论:素数筛选模板)
题目链接:传送门 题目: Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Des ...
- POJ-2689 Prime Distance (两重筛素数,区间平移)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13961 Accepted: 3725 D ...
- POJ-2689 Prime Distance,区间素数筛法
Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方 ...
- poj2689 Prime Distance题解报告
题目戳这里 [题目大意] 给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的. [思路分析] 其实很简单呀,很明显可以看出来是数论题,有关于质数的知识. 要注意一下的就是L和R的数据范围都 ...
- LeetCode解题报告—— N-Queens && Edit Distance
1. N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no ...
- POJ2689:Prime Distance(大数区间素数筛)
The branch of mathematics called number theory is about properties of numbers. One of the areas that ...
- poj2689 Prime Distance(素数区间筛法)
题目链接:http://poj.org/problem?id=2689 题目大意:输入两个数L和U(1<=L<U<=2 147 483 647),要找出两个相邻素数C1和C2(L&l ...
- POJ2689 - Prime Distance(素数筛选)
题目大意 给定两个数L和U,要求你求出在区间[L, U] 内所有素数中,相邻两个素数差值最小的两个素数C1和C2以及相邻两个素数差值最大的两个素数D1和D2,并且L-U<1,000,000 题解 ...
- POJ2689 Prime Distance 质数筛选
题目大意 求区间[L, R]中距离最大和最小的两对相邻质数.R<2^31, R-L<1e6. 总体思路 本题数据很大.求sqrt(R)的所有质数,用这些质数乘以j, j+1, j+2... ...
随机推荐
- 剑指Offer——对称的二叉树
题目描述: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 分析: 递归解法. 如果对称点一个有一边为空一边不为空,或者是对称点数值不一 ...
- 七牛云存储--内存put示例(go sdk)
啥都不说了,居然有文档,有git为啥不提供example? 自己看代码,琢磨了一下,原来是要这么用的.这里不得不吐槽一下package的命名,为啥要去io?golang自带系统包名就有io啊,哥哥. ...
- Web应用扩展系列(1):架构篇(转)
原文:Web应用扩展系列(1):架构篇 在这篇文章中,我将尽量涵盖Web应用扩展或性能调优时可能会遇到的一些架构问题. 首先,让我们来统一一些名词或项目的概念,下文中我将列举在扩展Web应用时可能会遇 ...
- Python并行编程(八):with语法
1.基本概念 当有两个相关的操作需要在一部分代码块前后分别执行的时候,可以使用with语法自动完成.同时,使用with语法可以在特定的地方分配和释放资源,因此,with语法也叫作"上下文管理 ...
- 技术架构标杆(Certicom Security Architecture)对比思考——By Me at 20140408
看到一家国外网络安全企业Certicom,官网链接:http://www.certicom.com/,可以作为很好的企业安全技术建构以及产品规划的标杆,下面我绘制了该公司的产品组合以及技术架构框图:
- JDK 注解详解
注解用途 我们在使用spring MVC框架时用到了很多的注解,如:@Controller.@RequestMapping等等,spring框架通过反射获取到标签进行不同的逻辑处理.注解是代码的附属信 ...
- linux中执行定时任务对oracle备份(crontab命令)
执行定时任务对oracle表数据备份: 1.创建sh脚本 [oracle@localhost ~]$ vi bak.sh 2.添加脚本内容 #!/bin/bash #:本脚本自动备份7天的数据库,每次 ...
- CanvasRenderingContext2D.lineDashOffset
https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/lineDashOffset CanvasRende ...
- keeplived + mysql双主复制部署 --原创
环境: master 1: 192.168.100.10 oracle linux 7.4 mysql 5.7.1 master 2: 192.168.100.11 oracle linux ...
- shared_ptr的线程安全
1.9 再论shared_ptr 的线程安全 虽然我们借shared_ptr 来实现线程安全的对象释放,但是shared_ptr 本身不是100% 线程安全的.它的引用计数本身是安全且无锁的,但对象的 ...