P1865 A % B Problem 素数筛

  

题目描述

区间质数个数

输入输出格式

输入格式:

一行两个整数 询问次数n,范围m

接下来n行,每行两个整数 l,r 表示区间

输出格式:

对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line

输入输出样例

输入样例#1: 复制
2 5
1 3
2 6
输出样例#1: 复制
2
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

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define pb push_back
#define fi first
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
///////////////////////////////////
#define inf 0x3f3f3f3f
#define N 100000000+5
int s,e;
int f[N];
int a[N]; void prime()
{
//0代表是素数 1代表不是素数 最好这样反过来 节省初始化为1的时间
a[]=;
for(int i=;i*i<=e;i++)
{
if(a[i]==)
for(int j=i*i;j<=e;j+=i)
a[j]=;
}
rep(i,,e)
{
f[i]=f[i-];
if(a[i]==)f[i]++;
}
}
int main()
{
int n;
RII(n,e);
prime();
rep(i,,n)
{
int a,b;
RII(a,b);
if(a<||b>e)printf("Crossing the line\n");
else printf("%d\n",f[b]-f[a-]);
}
return ;
}
上一篇:SQL查询 若为空显示默认值


下一篇:Getting NHibernate to generate a HiLo string ID