素数筛 poj 2689】的更多相关文章

素数筛 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define MAXN 47000 #define inf 100000000 bool z[MAXN]; int x[MAXN]; ]; ]; int main() { int a,b; ;i<=;i++) //可以从小的素数开始筛 { if(!z[i]) for(int j=i*i;j<MA…
给你一个n 求包括n的一个非素数区间有多长 +1输出 #include<stdio.h> #include<string.h> #include<algorithm> #include<vector> #include<math.h> using namespace std; #define MAXN 1302000 bool pri[MAXN]; int main() { memset(pri,,sizeof(pri)); ;i<=;i+…
http://poj.org/problem?id=2689 题意:给出一个大区间[L,U],分别求出该区间内连续的相差最小和相差最大的素数对. 由于L<U<=2147483647,直接筛素数是不行的,数组就开不了.可是能够依据素数筛的原理.我们先筛出sqrt(2147483647)以内的素数,然后拿这些素数去筛[L,U]之间的素数,即两次素数筛.可是L,U还是非常大,但U-L<=1000000,所以进行区间平移,将[L,U]平移为[0,U-L],就能用数组放得下. #include &…
题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑逆向思维: 我们先用线性筛 筛出前50000的素数,在int范围内的区间的合数的因子都在我们之前筛出来了, 然后我们就把这个区间的合数标记出来,剩下的就是素数了. 标记合数也是用全部的素数去筛一下,这样就能快速的标记这个区间的合数,然后在暴力枚举一下这个区间,更新一下答案. #include<cst…
/* *POJ 2689 Prime Distance *给出一个区间[L,U],找出区间内容.相邻的距离最近的两个素数和距离最远的两个素数 *1<=L<U<=2147483647 区间长度不超过1000000.就是要筛选出[L,U]之间的素数 */ #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cstdlib&…
找素数本来是很简单的问题,但当数据变大时,用朴素思想来找素数想必是会超时的,所以用素数筛法. 素数筛法 打表伪代码(用prime数组保存区间内的所有素数): void isPrime() vis[]数组清零://vis[]数组用于标记是否已被检验过 prime[]数组全赋初值false://prime[]数组从下标0开始记录素数 for i = 2 to MAXN (i++) if 数i未被检验过 prime[tot++]=i; for j = i*i to MAXN (j+=i) //j是i的…
这题就是先写个素数筛,存到prime里,之后遍历就好,取余,看是否等于0,如果等于0就更新,感觉自己说的不明白,引用下别人的话吧: 素数打表,找出20000之前的所有素数,存入prime数组,对于每个输入的数a,从prime数组最后一个数往前判断,如果a % prime[当前序号]== 0,那么将该素数就是输入数据a的最大素因子,找出所有输入数据的最大素因子,找出最大的那个对应的数据a即可,当a == 1的时候要特别处理. 然而我现在还是不懂,为什么输入是1 1的时候输出1,题目也没说啊,还有最…
题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U)最大也只有2^16,所以我们可以用素数筛选法,先预处理出2~2^16之间的素数,然后再用这些素数筛选出L~U之间的素数.接着就好办了. 有几个要注意的是:1:L为1的情况,可以通过令L=2或者标记isp[0]=false.2:建议用long long,否则很容易在过程中超int范围,导致数组越界RE…
题意:求[L,R]中差值最小和最大的相邻素数(区间长度不超过1e6). 由于非素数$n$必然能被一个不超过$\sqrt n$的素数筛掉,因此首先筛出$[1,\sqrt R]$中的全部素数,然后用这些素数去筛$[L,R]$. 注意1不是素数,但不会被筛掉,需要特殊处理(巨坑~~) #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ,inf=0x3f3f3f3f; ll L,R…
Description The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices. — It is a matter of security to change such things every now…