计蒜客 noip 模拟#4Day1T1 小X的素数 【线性筛】
2017-11-05 20:34
369 查看
题目链接:https://nanti.jisuanke.com/t/17322
题意:如果一个数是质数或者是两个质数之积那么这个数就称为 XX数,多次查询,每次询问 区间 [l,r] 之间的 XX数个数,查询次数 q≤105 询问区间 l,r<
bdae
span class="mo" id="MathJax-Span-336" style="font-family: MathJax_Main; padding-left: 0.269em;">≤107
题解:
首先很愉快的想到50%的做法,线性筛预处理一波,加一个前缀和优化就行了。
但……好像是d1t1啊?好像不够啊?
我们可以在线性筛的过程中将 liked[] 预处理出来,就 ok 了。
经过多次愉快的WA发现自己将10^7写成了10^6了。爽
代码:
题意:如果一个数是质数或者是两个质数之积那么这个数就称为 XX数,多次查询,每次询问 区间 [l,r] 之间的 XX数个数,查询次数 q≤105 询问区间 l,r<
bdae
span class="mo" id="MathJax-Span-336" style="font-family: MathJax_Main; padding-left: 0.269em;">≤107
题解:
首先很愉快的想到50%的做法,线性筛预处理一波,加一个前缀和优化就行了。
但……好像是d1t1啊?好像不够啊?
我们可以在线性筛的过程中将 liked[] 预处理出来,就 ok 了。
经过多次愉快的WA发现自己将10^7写成了10^6了。爽
代码:
#include <cstdio> #include <cstring> int Q; const int XN=10000005,size=664579+10000; int prime[XN]; bool notprime[XN],liked[XN]; int cnt=0; void xxs(){ for(int i=2;i<=10000000;i++){ if(!notprime[i]){ prime[++cnt]=i;liked[i]=1; for(int j=1;j<=cnt;j++){ if(1ll*prime[j]*i>10000000ll)break; liked[prime[j]*i]=1; notprime[prime[j]*i]=1; } }else{ for(int j=1;j<=cnt;j++){ if(1ll*prime[j]*i>10000000ll)break; notprime[prime[j]*i]=1; if(i%prime[j]==0)break; } } } } int sum[10000005]; void init(){ for(int i=1;i<=10000000;i++) if(liked[i])sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; } int main(){ xxs(); init(); scanf("%d",&Q); while(Q--){ int l,r,ans=0; scanf("%d%d",&l,&r); printf("%d\n",sum[r]-sum[l-1]); } return 0; }
相关文章推荐
- 【NOIP2011模拟9.20】素数密度
- 计蒜客NOIP提高组模拟Day2,Pro1蒜头君的兔子
- 【NOIP2011模拟9.20】素数密度
- 【NOIP模拟】素数密度
- 【NOIP2016提高A组模拟8.14】传送带
- 疯狂的火神【NOIP2016提高A组模拟8.14】
- NOIP 模拟练习题 最小奖励
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines【NOIP模拟笨笨的电话线】
- [NOIP] [模拟] NOIP2016Day1 玩具谜题
- noip2005 陶陶摘苹果 (模拟)
- [JZOJ 4699][CF583C]【NOIP2016提高A组模拟8.15】Password
- 洛谷 NOIP 模拟 DAY2
- JZOJ.4710【NOIP2016提高A组模拟8.17】Value
- 2017.11.7~8模拟测试总结---暨NOIP2017考前对策
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix
- 高中纪中OJ3078. 【备战NOIP2012图论专项模拟试题】无线通讯网
- 2016.10.29noip模拟总结
- JZOJ 4711 Binary【NOIP2016提高A组模拟8.17】
- UVA 583 素数打表(线性)