华师一附中OI组
标题:
P1865 A % B Problem
[打印本页]
作者:
倚窗倾听风吹雨
时间:
2018-9-23 14:01
标题:
P1865 A % B Problem
https://www.luogu.org/problemnew/show/P1865
题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数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
作者:
倚窗倾听风吹雨
时间:
2018-9-23 14:02
#include<iostream>
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int prime[10000005],f[10000005],n,m,a,b,t,tot;
bool num[10000005];
void eural(int x)
{
f[1]=0;
FOR(i,2,x)
{
if(!num[i])
{
prime[++tot]=i;
f[i]=f[i-1]+1;
}
else
f[i]=f[i-1];
FOR(j,1,tot)
{
if(i*prime[j]>x)
break;
num[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
int main()
{
cin>>n>>m;
eural(m);
while(n--)
{
cin>>a>>b;
if(a<1 || b>m)
{
cout<<"Crossing the line"<<endl;
continue;
}
else
{
t=f[b]-f[a-1];
cout<<t<<endl;
}
}
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2