JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数
来源:互联网 发布:韩国网络女主播李秀彬 编辑:程序博客网 时间:2024/06/07 00:24
Description
小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感。小X 认为,质数是一切自然数起源的地方。
在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数字。
但由于小X 对质数的热爱超乎寻常,所以小X 同样喜欢那些虽然不是质数,但却是由两个质数相乘得来的数。
于是,我们定义,一个数是小X 喜欢的数,当且仅当其是一个质数,或是两个质数的乘积。
而现在,小X 想要知道,在L 到R 之间,有多少数是他喜欢的数呢?
Input
第一行输入一个正整数Q,表示询问的组数。
接下来Q 行。包含两个正整数L 和R。保证L≤R。
Output
输出Q 行,每行一个整数,表示小X 喜欢的数的个数。
Sample Input
输入1:
1
1 6
输入2:
10
282 491
31 178
645 856
227 367
267 487
474 697
219 468
582 792
315 612
249 307
输入3:
10
20513 96703
15236 86198
23185 78205
40687 48854
42390 95450
63915 76000
36793 92543
35347 53901
44188 76922
82177 90900
Sample Output
输出1:
5
样例1解释:
6以内的质数有2,3,5,而4=2*2,6=2*3。因此2,3,4,5,6都是小X 喜欢的数,而1 不是。
输出2:
97
78
92
65
102
98
114
90
133
29
输出3:
24413
23001
17784
2669
16785
3833
17712
6028
10442
2734
Data Constraint
Solution
做法比较显然,首先线筛出质数来,
接着枚举两个质数(乘积大于
107 就退出),把其乘积也筛了。于是我们就得到一个判断一个数是否合法的布尔数组。
那么要求一个区间,就做一遍前缀和即可。
Code
#include<cstdio>using namespace std;const int N=1e7+1;int f[N];bool bz[N];inline int read(){ int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}inline void write(int x){ if(x>9) write(x/10); putchar(x%10+'0');}int main(){ for(int i=2;i<N;i++) { if(!bz[i]) f[++f[0]]=i; for(int j=1;j<=f[0] && i*f[j]<N;j++) { bz[i*f[j]]=true; if(i%f[j]==0) break; } } for(int i=1;i<=f[0];i++) for(int j=1;j<=f[0] && f[i]*f[j]<N;j++) bz[f[i]*f[j]]=false; f[0]=f[1]=0; for(int i=2;i<N;i++) f[i]=f[i-1]+(!bz[i]); int q=read(); while(q--) { int l=read(),r=read(); write(f[r]-f[l-1]),putchar('\n'); } return 0;}
- JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数
- JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
- JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
- JZOJ 5460. 【NOIP2017提高A组冲刺11.7】士兵训练
- Jzoj5458【NOIP2017提高A组冲刺11.7】质数
- JZOJ5458. 【NOIP2017提高A组冲刺11.7】质数
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- 【JZOJ 5442】【NOIP2017提高A组冲刺11.1】荒诞
- 【JZOJ 5441】【NOIP2017提高A组冲刺11.1】序列
- JZOJ 5442. 【NOIP2017提高A组冲刺11.1】荒诞
- 【JZOJ 5445】【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5443. 【NOIP2017提高A组冲刺11.2】字典序
- jzoj【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5444. 【NOIP2017提高A组冲刺11.2】救赎
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- 【JZOJ 5451】【NOIP2017提高A组冲刺11.4】Genocide
- Java静态对象和非静态对象有什么区别??
- 空语句的测试
- 关于火狐浏览器自动填充支付密码问题解决办法
- Java-BigDecimal类,BigInteger类
- LeetCode 721( Accounts Merge)
- JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数
- 汇编-寄存器
- 基于opencv的单张图像去雾算法(三)
- 彻底理解 Android Binder 通信架构
- UVA
- 函数的可重入与线程安全
- WPF遮罩层实现
- 图论(2017NOIP复习)
- Anaconda开发Python安装使用3.6.3