QDU-GZS与素数大法(素数筛法)
Description
自从GZS成为G神之后,追随者不计其数,更是有了大名鼎鼎的拜神论:
"吾尝终日编程也,不如须臾之拜拜G神也;吾尝打字刷题也,不如一日三拜G神也;
拜拜G神,程序非长也,而出结果;三拜G神,打字非快也,而能AC。
吾日三拜G神也!!!“
作为菜鸟,经常遇到一些难题,于是就去拜见G神了。G神一看题目,微微一笑说道:“这种水题也算难题?我闭着眼都能一分钟刷十道!”毕竟是G神,我等菜鸟还是得虚心向G神学习。各位大神们,相信这道水题你们也能很快就AC吧。题目是这样的:
给定一个范围[l,r],求[l, r]中的距离最近的两个相邻素数和距离最远的两个相邻素数。
Input
多组测试数据,每组数据一行,包含两个数字l和r。1<=l<=r<=5*10^6。
Output
如果存在,则按样例格式输出最近的两个素数和最远的两个素数(如果有多个,输出最小的);如果不存在,输出一行:There are no adjacent primes.
Sample Input 1
- 2 17
- 14 17
Sample Output 1
- 2,3 are closest, 7,11 are most distant.
- There are no adjacent primes.
Source
qduoj 第一次月赛 for 2014级
思路:用欧拉筛法先筛出素数,然后遍历两次找出最大的和最小的,注意1既不是素数也不是合数
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int prime[5000005];
bool vis[5000006];
void oula() {
int cnt=0;
memset(prime,0,sizeof(prime));
memset(vis,false,sizeof(vis));
for(int t=2; t<=5000005; t++) {
if(!vis[t])
prime[cnt++]=t;
for(int j=0; j<cnt&&t*prime[j]<=5000005; j++) {
vis[t*prime[j]]=true;
if(t%prime[j]==0)
break;
}
}
}
int a[5000005];
int b[5000005];
int main()
{
int l,r;
int k;
int k2;
oula();
vis[1]=true;
while(cin>>l>>r)
{
k=0;
k2=0;
for(int t=l;t<=r;t++)
{
if(vis[t]==false)
{
a[k++]=t;
}
}
for(int t=1;t<k;t++)
{
b[k2++]=a[t]-a[t-1];
}
sort(b,b+k2);
int s1,s2,s3,s4;
for(int t=1;t<k;t++)
{
if(a[t]-a[t-1]==b[0])
{
s1=a[t-1];
s2=a[t];
break;
}
}
for(int t=1;t<k;t++)
{
if(a[t]-a[t-1]==b[k2-1])
{
s3=a[t-1];
s4=a[t];
break;
}
}
if(k>1)
cout<<s1<<","<<s2<<" are closest, "<<s3<<","<<s4<<" are most distant."<<endl;
else
{
cout<<"There are no adjacent primes."<<endl;
}
}
return 0;
}
QDU-GZS与素数大法(素数筛法)的更多相关文章
- poj 2689 Prime Distance (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
- HDU 2098 分拆素数和(素数)
HDU 2098 分拆素数和(素数) http://acm.hdu.edu.cn/showproblem.php?pid=2098 题意: 给你一个偶数,问你这个偶数有多少种方式能由两个不同的素数构成 ...
- GDUFE-OJ 1359校庆素数 埃氏筛法
Problem Description: 包含33的素数称为校庆素数. 她想知道在L和R之间(包含L和R)有多少个校庆素数. 比如 2333 就是一个校庆素数. Input: 输入的第一行包括一个T( ...
- [洛谷P3383][模板]线性筛素数-欧拉筛法
Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的 ...
- 埃氏筛法求素数&构造素数表求素数
埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1 ...
- 素数筛 : Eratosthenes 筛法, 线性筛法
这是两种简单的素数筛法, 好不容易理解了以后写篇博客加深下记忆 首先, 这两种算法用于解决的问题是 : 求小于n的所有素数 ( 个数 ) 比如 这道题 在不了解这两个素数筛算法的同学, 可能会这么写一 ...
- 关于素数:求不超过n的素数,素数的判定(Miller Rabin 测试)
关于素数的基本介绍请参考百度百科here和维基百科here的介绍 首先介绍几条关于素数的基本定理: 定理1:如果n不是素数,则n至少有一个( 1, sqrt(n) ]范围内的的因子 定理2:如果n不是 ...
- 九度OJ 1163:素数 (素数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8496 解决:2887 题目描述: 输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数 ...
- hdu2098 分拆素数和 素数筛
将一个偶数拆成两个素数的和,欧拉筛暴力 #include<stdio.h> #include<string.h> #define N 10001 ]; ]; ,j; void ...
随机推荐
- BZOJ 2020 [Usaco2010 Jan]Buying Feed,II:贪心【定义价值】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2020 题意: FJ开车去买K份食物. 如果他的车上有X份食物,每走一里就花费X元. FJ的 ...
- NOIP 2016【蚯蚓】
好吧,我承认我是个智障-- 这道题一眼看上去就是个堆,然而实际上有单调性. 注意到,如果 \(q = 0\) 的话,将蚯蚓的左右两边分开丢进两个队列中,则两个队列都是单调不增的,因为每次取出的蚯蚓长度 ...
- SocketSessionConfig参数设制
Mina 是一个韩国人写的基本java NIO的一个高性能的传输框架,我们的搜索就是基本它作为一个搜索服务开放接口了.对于系统的TIME_WAIT过多,造成服务器的负载过高,这个问题我也不用多说了,这 ...
- (转)select、poll、epoll之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.但select ...
- str_2.判断两个字符串是否互为旋转词
1. 字符串str的前面任意部分挪到后面形成的字符串叫做字符串str的旋转词 $str1 = "2ab1"; $str2 = "ab12"; $ret = is ...
- linux安装与卸载软件
在ubuntu系统中,通常使用apt-get命令完成对软件的安装与卸载 安装的软件通常都放置在一些源中,国内有很多镜像源供下载使用,而系统设置的源保存在目录/etc/apt/sources.list文 ...
- <C++>友元与虚函数的组合
为类重载<<与>>这两个运算符时,重载函数必须为该类的友元函数. 当友元不能被继承,故不能当作虚函数,无法使用多态. 可以用以下结构实现友元与虚函数的组合. class bas ...
- MySQL与EXCEL sum sumif sumifs 函数结合_品牌汇总_20161101
计算一些数不难,整体来说还是要培养自我的逻辑意识,逻辑清楚,代码自然而然就知道,总体上训练自己的逻辑,一个是从用户角度,一个是从产品角度. 用户角度需要考虑的是用户的活跃度,具体又可以细分为用户的注册 ...
- bzoj 3267: KC采花&&3272&&3638&&3502 线段树
题目大意 给定一个长为n的序列,维护两种操作: 1.单点修改 2.在[l,r]这段区间中取k个互不相交的子段,使子段之和最大. \(n \leq 50000,k \leq 20\) 题解 四倍经验.( ...
- bzoj 4514: 数字配对
题目大意 自己看 题解 我们打表观察规律发现一定能构成一张二分图 也就是不存在奇环 所以我们一般保证费用非负的最大流即可. #include <cstdio> #include <c ...