【Java欧拉筛】P5736 【深基7.例2】质数筛

【深基7.例2】质数筛

题目描述

输入 n n n 个不大于 1 0 5 10^5 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。

输入格式

第一行输入一个正整数 n n n,表示整数个数。

第二行输入 n n n 个正整数 a i a_i ai,以空格隔开。

输出格式

输出一行,依次输出 a i a_i ai 中剩余的质数,以空格隔开。

样例 #1

样例输入 #1

5
3 4 5 6 7

样例输出 #1

3 5 7

提示

数据保证, 1 ≤ n ≤ 100 1\le n\le100 1n100 1 ≤ a i ≤ 1 0 5 1 \leq a_i \leq 10^5 1ai105

代码

import java.io.*;
import java.util.Arrays;
import java.util.function.IntConsumer;

public class Main {
    private final static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    private final static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    public static void main(String[] args) throws IOException {

        int i = Integer.parseInt(in.readLine());
        int[] s = Arrays.stream(in.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int[] ints = Arrays.stream(s).filter(item -> isPrime(item) && item != 1).toArray();
        Arrays.stream(ints).forEach(it ->  out.printf(it+" "));
        out.flush();
    }

     private static boolean isPrime(int num){
         for (int i = 2; i <= Math.sqrt(num); i++) {
             if (num % i == 0) return false;
         }
         return true;
     }
}

最优解

import java.io.*;
public class Main {
	static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
	static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	private static int nextInt() throws IOException {
		in.nextToken();
		return (int)in.nval;
	}
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		int n = nextInt();
		while(n -- != 0) {
			int x = nextInt();
			is_Primes(x);
		}
	}
	public static void is_Primes(int x) {
            if(x <= 1)
			return;
		for(int i = 2;i <= Math.sqrt(x);i ++)
			if(x % i == 0)
				return;
		System.out.print(x+" ");
	}

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值