洛谷 P1865 A % B Problem
Posted five20
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1865 A % B Problem相关的知识,希望对你有一定的参考价值。
题目戳
题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数n,范围m
接下来n行,每行两个整数 l,r 表示区间
输出格式:
对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line
输入输出样例
说明
【数据范围和约定】
对于20%的数据 1<=n<=10 1<=m<=10
对于100%的数据 1<=n<=1000 1<=m<=1000000 -10^9<=l<=r<=10^9 1<=t<=1000000
Solution:
炒鸡大水题。注意到m范围1000000,需要询问某个区间内的质数个数,直接可以联想到前缀和,很自然的想到线性筛预处理出质数,然后就OK了。
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int T,m,num,sum[1000005]; 4 bool a[1000005]; 5 int main() 6 { 7 scanf("%d%d",&T,&m); 8 for(register int i=2;i<=m;i++) 9 { 10 if(a[i]==0) 11 { 12 sum[i]=sum[i-1]+1; 13 for(register int j=i;j<=m;j+=i)a[j]=1; 14 } 15 else sum[i]=sum[i-1]; 16 } 17 while(T--) 18 { 19 int x,y; 20 scanf("%d%d",&x,&y); 21 if(y>m||y<1||x<1) printf("Crossing the line\n"); 22 else 23 { 24 printf("%d\n",sum[y]-sum[x-1]); 25 } 26 } 27 return 0; 28 }
以上是关于洛谷 P1865 A % B Problem的主要内容,如果未能解决你的问题,请参考以下文章
洛谷 P1865 A % B Problem(简单区间素数) 题解
洛谷 P1865 A % B Problem (欧拉筛+前缀和)