poj 2689Prime Distance(区间素数)埃氏筛法
这道题的L和R都很大,所以如果直接开一个1~R的数组明显会超时。但是R-L并不大,所以我们考虑把这个区间(L--R)移动到(1--(R-L+1))这个区间再开数组(就是把每个数减L再加1)。接下来先用埃氏筛分(可以自行百度)求出【2,√R】区间的素数,并存在prime数组里。对于prime数组里的每一个质数,求出其在区间(L--R)的倍数并且标记成false(非素数)。那么剩下的区间(L--R)里的数就都是素数咯~然后相邻的比较,求出差最大的和差最小的即可。
注意的细节:1.判断素数的数组(prime是用来储存素数数据的,用long long)isprime[],和 a[] 最好用bool,节省空间。
2.这道题非bool的数据类型最好都开long long的,不然大的数据点会RE。
3.注意左区间是“1”的情况,“1”是非素数。
下面给出代码:(必要的有注释)
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll prime[],cnt;//prime存储【2,√R】区间的素数,cnt记录该区间素数个数
bool isprime[];//isprime:初始判断 【2,√R】区间的素数
bool a[];//原区间左右至(1~(R-L+1)) 后,判断素数
ll l,r;
void ini()
{
memset(isprime,,sizeof(isprime));
isprime[]=isprime[]=;
memset(a,,sizeof(a));
}
void sushu()//初始用埃氏筛法,筛选 【2,√R】区间的素数
{
for (ll i=;i*i<=r;i++)
{
if (isprime[i])
{
prime[cnt++]=i;
for (ll j=i*i;j*j<=r;j+=i)
isprime[j]=;
}
}
}
void sift()//筛选区间内的素数
{
for (ll i=;i<cnt;i++)
{
ll bm=l/(ll)prime[i];
for (ll j=bm*(ll)prime[i];j<=r;j+=(ll)prime[i])
if ((j)!=(ll)prime[i]) a[j-l+]=;
}
if (l==) a[]=;//注意“1”不是素数
}
void minus()//相邻素数求差最大和差最小
{
ll pre=,minans=,maxans=,x1,x2,y1,y2;
for (ll i=;i<=(r-l+);i++)
{
if (a[i])
{
if (pre)
{
if (i-pre > maxans)
maxans=i-pre,x1=pre,x2=i;
if (i-pre < minans)
minans=i-pre,y1=pre,y2=i;
}
pre=i;
}
}
if (maxans && minans!=)
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",(ll)y1+l-,(ll)y2+l-,(ll)x1+l-,(ll)x2+l-);
else printf("There are no adjacent primes.\n");
}
int main()
{
while (scanf ("%lld%lld",&l,&r)!=EOF)
{
ini();
sushu();
sift();
minus();
}
return ;
}
poj 2689Prime Distance(区间素数)埃氏筛法的更多相关文章
- GDUFE-OJ 1359校庆素数 埃氏筛法
Problem Description: 包含33的素数称为校庆素数. 她想知道在L和R之间(包含L和R)有多少个校庆素数. 比如 2333 就是一个校庆素数. Input: 输入的第一行包括一个T( ...
- POJ-2689 Prime Distance,区间素数筛法
Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方 ...
- 素数判断-----埃氏筛法&欧拉筛法
埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...
- 埃氏筛法求素数&构造素数表求素数
埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1 ...
- [算法]素数筛法(埃氏筛法&线性筛法)
目录 一.素数筛的定义 二.埃氏筛法(Eratosthenes筛法) 三.线性筛法 四.一个性质 一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选 ...
- Codeforces Round #270 A. Design Tutorial: Learn from Math【数论/埃氏筛法】
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game
题目传送门 /* 题意:b+1,b+2,...,a 所有数的素数个数和 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1:否则它可以从一个数乘以素数递推过来 最后改为i之前所有素数个 ...
- 埃氏筛法(快速筛选n以内素数的个数)
给你一个数n,请问n以内有多少个素数?(n <= 10e7) 一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n ...
- poj 2689 Prime Distance (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
随机推荐
- windows平台下为Nginx反向代理(负载均衡)使用openssl增加HTTPS/SSL功能。
1.准备好perl/openssl ActivePerl-5.12.2.1202-MSWin32-x86-293621.msi openssl-0.9.8k.tar.gz 编译 参考这个:http:/ ...
- React Native 入门篇
React Native 英文官网:https://facebook.github.io/react-native/ React Native 中文官网:http://reactnative.cn/ ...
- spark之pycharm开发设置
方法一: __author__ = 'similarface' import os import sys os.environ['SPARK_HOME']="/Users/similarfa ...
- 史上最浅显易懂的Git教程1
工作区(Working Directory)就是你在电脑里能看到的目录, 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stag ...
- 目标检测之hog(梯度方向直方图)---hog简介0
梯度直方图特征(HOG) 是一种对图像局部重叠区域的密集型描述符, 它通过计算局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功 ...
- 【转】windows下 ADT NDK开发环境配置
前提: 下载好Ecplise ADT并配置好开发环境,不会配置环境可以参考这里: http://blog.csdn.net/danfengw/article/details/47111107 步骤: ...
- PHP中的session永不过期的解决思路及实现方法分享
打开php.ini设置文件,修改三行如下: 1.session.use_cookies 把这个的值设置为1,利用cookie来传递sessionid 2.session.cookie_lifeti ...
- mysql 查看触发器,删除触发器
1. 查看所有触发器 2. 根据触发器名称看下相关触发器信息 3. 查看所有触发器 另一种查询触发器命令: show triggers; 删除触发器命令: drop trigger trigg ...
- JS基础知识再整理..........不断更新中
1.JS的五种基本数据类型:字符串.数值.布尔.null.underfined. 2.在JS中,字符串.数值.布尔三种数据类型,有其属性和方法: 3.字符串的三种常用方法[.indexof()..su ...
- python venv虚拟环境
1 目的 给python应用一个独立的运行环境,独立于其它的python应用也独立于系统的python环境. 环境升级不影响其它应用. 避免包冲突. 2 创建方式 2.1 pycharm中创建 pro ...