Luogu1835 素数密度_NOI导刊2011提高(04

这题有两种做法,一种是 Miller-Rabin 直接暴力做

还有一种是正解的筛法


 先说 Miller-Rabin

就直接上板子就行了

但是 1e6 带一堆 log 显然不稳

就 “记忆化” 一下,把每个询问过的数字的倍数直接处理掉

直接上真的会 T
直接把询问过的数字倍数的抹掉就能过了
其实应该是把质数的倍数抹掉感觉能少一点常数

代码:


 然后是正解的做法

直接线性筛肯定是不可行的

考虑怎么搞掉特别大的合数

2147483647 的 mindiv 也不过才 46341

所以直接用 mindiv 去删掉区间内的数就行了,其他的数不用管

这样它大概是个 len * ln len 的

由于这并不是调和级数,分母都是质数,而且并不是 1e6 内的所有
所以它还要小很多

总之比 n log n 快

代码:

  

posted @   EvalonXing  阅读(166)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示