【深基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 1≤n≤100, 1 ≤ a i ≤ 1 0 5 1 \leq a_i \leq 10^5 1≤ai≤105。
代码
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+" ");
}
}