博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小X的质数 NOIP模拟赛 魔改线性筛素数
阅读量:7040 次
发布时间:2019-06-28

本文共 1249 字,大约阅读时间需要 4 分钟。

题意:求 [ L , R ] 范围内是质数两个质数乘积的数的个数

魔改线性筛素数即可,预处理1~Nmax的所有符合要求的数的数量,对于每组询问 O(1) 回答。

对于每个素数,肯定是要计算的。在后面排除合数的时候,判断当前数是不是素数,若是,也算入其中。

用前缀和优化,对于一组询问[L,R],回答 cnt[R]-cnt[L-1] 即可

#include
using namespace std;template
inline void read(T &_a){ bool f=0;int _ch=getchar();_a=0; while(_ch<'0' || _ch>'9'){
if(_ch=='-')f=1;_ch=getchar();} while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();} if(f)_a=-_a;}const int maxn=10000000;bool nprime[maxn+1],like[maxn+1];int cnt[maxn+1],Q,tot,pri[maxn+1];inline void __super_boluo_banana_ship(){ for (register int i=2;i<=maxn;++i) { if(!nprime[i]) pri[++tot]=i,like[i]=true; for(register int v=1;v<=tot&&pri[v]*i<=maxn;++v) { if(!nprime[i]) like[pri[v]*i]=true; nprime[pri[v]*i]=true; if(i%pri[v]==0) break; } } for (register int i=2;i<=maxn;++i) cnt[i]=cnt[i-1]+like[i];}int main(){ freopen("prime.in","r",stdin); freopen("prime.out","w",stdout); read(Q); __super_boluo_banana_ship(); // 超级菠萝香蕉船 for (register int L,R;Q;--Q) { read(L); read(R); printf("%d\n",cnt[R]-cnt[L-1]); } return 0;}

 

转载于:https://www.cnblogs.com/jaywang/p/7709348.html

你可能感兴趣的文章
springboot 处理后端long传给前端精度丢失问题
查看>>
Issue 2:Introduction 方法论
查看>>
[译文]扩展Repeater控件以支持DataPager分页
查看>>
知名网站内部资料:WEB页面内容优化管理与性能技巧
查看>>
20+个可重复使用的jQuery代码片段
查看>>
一致性Hash
查看>>
Mysql jdbc driver源码浅析(一)
查看>>
Super Jumping! Jumping! Jumping!
查看>>
2014 ACM/ICPC Asia Regional Xi'an Online poj5007 Post Robot
查看>>
浅谈P2P
查看>>
[c++]指针的个人理解
查看>>
88. Merge Sorted Array
查看>>
java抽象类和接口区别
查看>>
构建Ruby开发环境(Windows+Eclipse+Aptana Plugin)
查看>>
Miao Xian 隐私政策
查看>>
三维实景下的南极科考站是什么样子?
查看>>
高亮显示用户键盘输入(<kbd>)
查看>>
Linux利用scp命令来进行文件复制
查看>>
【LabVIEW技巧】你可以不懂OOP,却不能不懂封装
查看>>
你是否也忘了刷新视图?
查看>>