大數區間素數篩

2021-08-20 02:17:05 字數 516 閱讀 1578

給定a,b求[a,b)區間內的素數數量(1 ≤ a ≤ b < 231, b - a ≤ 100000)

暴力線性篩mle,這時就要用到區間線性篩了,利用陣列偏移,只需要篩一下(1,sqrt(b))

#include #include #include using namespace std;

typedef long long ll;

const int maxn = 1000005;

bool is_prime[maxn];

bool is_prime_small[maxn];

ll prime[maxn];

ll prime_num=0;

//對區間[a,b)內的整數執行篩法,is_prime[i-a]=true --- 表示i是素數 注意這裡下標偏移了a,所以從0開始。

void segment_sieve(ll a,ll b)

cout<}

return 0;

}

區間素數篩

給定整數a和b,請問區間 a,b 內有多少個素數?ab a 10 6 因為b以內合數的最小質因數一定不超過sqrt b 如果有sqrt b 以內的素數表的話,就可以把篩選法用在 a,b 上了,先分別做好 2,sqrt b 的表和 a,b 的表,然後從 2,sqrt b 的表中篩得素數的同時,也將其倍...

區間素數篩

題目 p1835 素數密度 題目中區間的端點很大,但是區間的長度不長.解題思路 1.先用埃氏篩選掉 1 到 sqrt r 的合數 2.用第一步的素數表篩選掉 l 到 r 的合數 一二步一起進行 3.計算素數個數 includeusing namespace std const int ma 1e6 ...

模板 區間篩素數

原理 乙個數的倍數肯定不是素數 若給定子區間 fst,lst 則必有區間內任意數最大的因子是sqrt lst 因此只需要將2 sqrt lst 中的所有質數的倍數從區間 fst,lst 中劃掉即可 剩下的就是區間內的素數 注意兩個情況 1.第一次篩出的素數就在區間裡 要特判 2.將區間 fst,ls...