P1865 A % B Problem
注意当不在
[
1
,
m
]
[1,m]
[1,m]范围内时,直接输出,所以素数不用找到1e9,注意数组范围,忘记开大了,wa了几发
#include<bits/stdc++.h>
using namespace std;
int cnt=0;
const int N=1e6+10;
int st[N],prime[N],an[N];
int main()
{
st[1]=1;
int n,m;
cin>>n>>m;
for(int i=2;i<=m;i++)
{
if(st[i]==0) prime[cnt++]=i;
for(int j=0;prime[j]<=m/i;j++)
{
st[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
an[1]=0;
for(int i=2;i<=m;i++)
{
if(st[i]==0)
{
an[i]=an[i-1]+1;
}
else an[i]=an[i-1];
}
while(n--)
{
int l,r,ans=0;
cin>>l>>r;
// cout<<l<<" "<<r<<" "<<m;
if(l<=0||r>m)ans=-1;
else
{
ans=an[r]-an[l];
if(st[l]==0)ans++;
//cout<<an[l]<<" "<<an[r];
}
if(ans!=-1)cout<<ans<<endl;
else cout<<"Crossing the line"<<endl;
}
}