題目:p1835 素數密度
題目中區間的端點很大,但是區間的長度不長.
解題思路:
1.先用埃氏篩選掉 1 到 sqrt(r) 的合數
2.用第一步的素數表篩選掉 l 到 r 的合數 (一二步一起進行)
3.計算素數個數
**:
#includeusingnamespace
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...