区间筛法

2016.1.26

主体思想与前面两种筛法一致,但一般题目中数据范围比较大(a<b<=10^12),但也有个利于我们的限制条件(b-a<=10^6)

那就很简单了,根据我们熟知的理论,b以内的合数的最小质因数不会大于√b,所以我们就可以筛出[1,√b]内的素数并用这些素数去筛除[a,b]的合数。

典型例题:区间内素数的个数

时间: 2024-11-10 15:50:25

区间筛法的相关文章

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

大致题意:给定[L,R]区间,找出区间内的每个素数 数据范围 : 1<=L< R<=2,147,483,647) R-L <=1,000,000. R的数值太大,所以不能直接筛[0,R]的,要空间和时间优化,用到区间筛法,另外注意不能用int,因为R和L都是满int的,中间有很多细节处理会爆int的,还要注意1不是素数,所以在区间筛中要特判一下,是个易错的地方 //1160K 16MS C++ 1539B #include<cstdio> #include<ios

模板——区间筛法

原博文http://www.cnblogs.com/nowandforever/p/4515612.html /************************************************ * Author :Powatr * Created Time :2015-8-17 8:56:45 * File Name :区间筛法.cpp ************************************************/ #include <cstdio> #in

POJ2689——区间筛法——Prime Distance

http://poj.org/problem?id=2689 /* 区间筛法适用于L, R范围比较大,但是区间长度较小时 套个模板然后取出最小最大就可以 */ /************************************************ * Author :Powatr * Created Time :2015-8-17 9:38:50 * File Name :POJ2689.cpp ********************************************

POJ-2689-Prime Distance(素数区间筛法)

链接: https://vjudge.net/problem/POJ-2689 题意: The branch of mathematics called number theory is about properties of numbers. One of the areas that has captured the interest of number theoreticians for thousands of years is the question of primality. A

poj 2689 区间筛素数

由于区间的右端点非常大(INT_MAX),而区间长度相对小(100W),所以考虑区间筛法,左端点为1的情况需要特判一下. 1 #include <cstring> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 6 typedef long long ll; 7 const int MAX = 9999999; 8 const int MIN = -1; 9 const int N = 50

欧拉筛和区间筛

首先介绍一下线性筛,之所以称之为线性筛是因为它的复杂度为O(n). 与埃氏筛相比,欧拉筛不会对已经被标记过的合数再进行重复标记,它们保证每个合数只会被它的最小质因数筛去故效率更高.欧拉筛将合数分解为 (最小质因数 * 一个合数) 的形式,通过最小质因数来判断当前合数是否已经被标记过. 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 5 const int maxn = 10000, n = 2000

51nod 1184 第n个素数

这题大概有两种解法: 1.预先打表放到数组里,大概100万间隔的素数的值$p_n$,然后用区间筛法.可以分的再细一点. 2.先估计,再用筛法.你需要一个第n个素数的估计值,一个素数统计函数和区间筛法,根据wiki上的关于第n个素数的公式,通过打表,我发现他有时大于实际值,有时小于实际值,我觉得让估计值保持小于实际值比较方便,这样区间筛的时候,只要向上筛就好了.经过修正我预估的第n个素数 $ p_n=n (n \log +\log  (n \log )-1)+\frac{n (\log  (n \

数学技巧之素数筛选

如果只是对一个整数进行素性测试的只要o(√n)的复杂度便可以判定,蓝而如果是n个呢(n<=1000)照样可以,那如果100000个呢?对于普通的o(n√n)根本跑不动,因此我们必须寻找更加高效的算法,常用的筛选方法有埃氏筛法, 区间筛法,欧拉筛法. 1.埃氏筛法 首先,我们先把2-n范围内的数写下来,其中最小的素数是2,那么能被2整除的数便不是素数,那么我们可以把2的倍数都划去.然后剩下的最小素数便是3,我们便把3的倍数都划去,以此类推.这样反复操作我们就能枚举n以内的素数. 贴上伪代码: 1

UVa 10006 Carmichael Numbers (快速幂 + 素性测试)

Carmichael Numbers Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Carmichael Numbers  An important topic nowadays in computer science is cryptography. Some people even think that cryptography is t