import java.util.Scanner;
/**
输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数
输入描述:
两个整数M,N
输出描述:
区间内素数的个数
示例1
输入
2 10
输出
4
* @author zhaoz
*
*/
public class getMtoNPrime {
public static void getPrimeCount(int m, int n) {
int count = 0;
if(m > 2) { //从2 开始则个数先加1
count = 0;
} else {
count = 1;
}
boolean[] temp = new boolean[n+1];
for(int i = m; i <= n; i++) { //除2以外的偶数都被筛选掉
if(i % 2 == 0) temp[i] = false;
else temp[i] = true;
}
for(int j = 3; j*j <= n; j += 2) { // 筛选掉3,5,7,9的倍数
if(temp[j]) {
for(int k = j + j; k <= n; k += j) {
temp[k] = false;
}
}
}
for(int i = m; i <= n; i++) {
if(temp[i]) count++;
}
System.out.println(count);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
getPrimeCount(m, n);
}
}