解题思路:暴力打表,然后判断就行
#include<bits/stdc++.h>
#define MAX 1000001
using namespace std;
using gg=long long;
gg n,m;//查询次数和右端点
gg arr[MAX];//素数表,前i个数一共有多少个素数
bool check(gg num)
{
for(int i=2;i<=sqrt(num);i++)
{
if(num%i==0)
{
return false;
}
}
return true;
}
void get_sushu()
{
arr[0]=0;
arr[1]=0;
arr[2]=1;
for(int i=3;i<=MAX;i++)
{
if(check(i))
{
arr[i]=arr[i-1]+1;
}
else
{
arr[i]=arr[i-1];
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
gg l,r;
get_sushu();
for(int i=0;i<n;i++)
{
cin>>l>>r;
if(l<1||r>m)
{
cout<<"Crossing the line"<<"\n";
}
else
{
gg temp = arr[r]-arr[l-1];
cout<<temp<<"\n";
}
}
return 0;
}