【题目】Problem A.质数统计

Problem A.质数统计

题目描述
给你一个数字n( n <=30),求比和小的质成的个数:

输入描述
第一行是数据组数T(T<=10)。
接下来T行每行有一个整数n。

输出描述
对于每组输入,输出一个数字表示比它小的质数的个数。

样例输入

3
3
5
8

样例输出

1
2
4

解答:

import java.util.Scanner;
/*
Problem A.质数统计
题目描述
给你一个数字n( n <=30),求比和小的质成的个数:
输入描述
第一行是数据组数T(T<=10)。
接下来T行每行有一个整数n。
输出描述
对于每组输入,输出一个数字表示比它小的质数的个数。
样例输入
3
3
5
8
样例输出
1
2
4
 */
public class Test{
	public static void Prim(int[] prim, boolean[] isPrim, int cnt, int num) {//欧拉筛素数
		for(int i = 2; i < num; i++) {
			if(!isPrim[i]) prim[cnt++] = i;//i未标记,则记录至素数数组中
			for(int j = 0; j < cnt && i * prim[j] < num; j++) {
				isPrim[i * prim[j]] = true;//标记为访问过
				//停止条件,也是欧拉筛的核心
			     if (i % prim[j] == 0) break;
			}
		}
	}
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			int n = scanner.nextInt();
			for(int t = 0; t < n; t++) {
				int num = scanner.nextInt();
				int[] prim = new int[num];
				int cnt = 0;
				boolean[] isPrim = new boolean[num];
				Prim(prim, isPrim, cnt, num);
				int count = 0;
				for(int i = 0; i < num; i++) {
					if(prim[i] == 0) break;
					count++;
				}
				System.out.println(count);
			}
		}
	}
}
发布了233 篇原创文章 · 获赞 254 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_44485744/article/details/105035637
今日推荐