题目描述
给定整数a和b,请问区间 [a,b)内有多少个素数?
输入
输入包括一行两个正整数a,b
a<b<=10^12
b-a<=10^6
输出
输出区间 [a,b)的素数的个数。
输入样例
22 37
输出样例
3
这道题的主要用到的知识是区间筛选。
题解
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define N 1000
int prime[N];
bool is_prime[N];
bool is_prime_small[N];
int f,i,j,g;
void sieve(int x,int y){
for(i=2;i<sqrt(y);i++)
is_prime_small[i]=true;
for(i=x;i<y;i++)
is_prime[i]=true;
for(i=2;i<sqrt(y);i++){
if(is_prime_small[i]){
for(j=2*i;j<sqrt(y);j=j+i){
is_prime_small[j]=false;
}
if(x%i==0)
g=x/i;
else{
g=x/i+1;
}
for(j=max(2,g)*i;j<=y;j=j+i){
is_prime[j]=false;
}
}
}
return ;
}
int main(){
int a,b,d=0;
cin>>a>>b;
sieve(a,b);
for(i=a;i<b;i++){
if(is_prime[i])
d++;
}
if(a==1)
d--;
cout<<d;
return 0;
}