區間素數篩

2022-04-30 07:30:10 字數 604 閱讀 5125

題目:p1835 素數密度

題目中區間的端點很大,但是區間的長度不長.

解題思路:

1.先用埃氏篩選掉 1 到 sqrt(r) 的合數

2.用第一步的素數表篩選掉 l 到 r 的合數 (一二步一起進行)

3.計算素數個數

**:

#includeusing

namespace

std;

const

int ma = 1e6+5

;typedef

long

long

ll;bool

book[ma];

bool

a[ma];

ll pri[ma];

ll cnt = 0

;void

prime(ll l,ll r)

ll t = (l+i-1)/i;//

向上進製

for(ll j = t * i ; j <= r ; j +=i) }}

}int

main()

printf(

"%lld\n

",ans);

return0;

}

區間素數篩

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

大數區間素數篩

給定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...

模板 區間篩素數

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