吉比特_笔试_区间内素数个数

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);
	}
}

  

posted @ 2017-08-27 14:49  55329  阅读(288)  评论(0编辑  收藏  举报