计算 区间[a,b]的所有质数个数
2≤a<b≤10^9,b-a<=1000000
import java.util.Scanner;
public class Main {
static final int MAX=1000000+10;
static final boolean[] flag=new boolean[MAX];
static final int[] prime=new int[MAX];
static final boolean[] vis=new boolean[MAX];
static int cnt=-1;
static {//埃氏筛法
for(int i=2;i*i<=50000;i++){
if(!vis[i]){
for(int j=i*i;j<=50000;j+=i)
vis[j]=true;
}
}
for(int i=2;i<=50000;i++)
if(!vis[i])
prime[++cnt]=i;
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int L=cin.nextInt();
int R=cin.nextInt();
System.out.println(Prime(L,R));
}
static int Prime(int L,int R){
for(int i=0;i<=cnt;i++){
for(int j=Math.max(2,(L-1)/prime[i]+1)*prime[i];j<=R;j+=prime[i]){
if(j-L>=0)
flag[j-L]=true;
}
}
int ans=0;
for(int i=L;i<= R;i++)
if(!flag[i-L])
++ans;
return ans;
}
}