题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数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
分析
先做一遍筛选法,读入的时候把范围排一下,直接出解。
假如又不知道筛选法什么的点一下(http://baike.baidu.com/link?url=kHIPPOBvFtT-OIyrTIBU8GuUpbZDPB9DxtFm0PXU8E4nohSr5zjt3AfstyckFvBg2u64j9dV25WCyHQzqa5HIeBaaBfrfFhd2o9Nv11scBhjcyHVbQN6RYVkOlFSnxZF)
代码
include
include
#define N 10000000
using namespace std;
int n, m, sum[N];
bool s[N];
int main()
{
scanf(“%d%d”, &n, &m);
for(int i = 2; i * i <= m; i++)
if(s[i] == 0)
for(int j = 2; j <= m / i; j++)
s[i * j] = true;
s[1] = true;
for(int i = 1; i <= m; i++)
sum[i] = sum[i - 1] + (1 - s[i]);
for(int i = 1; i <= n; i++)
{
int l, r;
scanf("%d%d", &a, &b);
if(a < 1 || b > m)
{
printf("Crossing the line\n");
continue;
}
printf("%d\n", sum[b] - sum[a - 1]);
}
return 0;
}