查找并返回数组中的所有素数。 JAVA

时间:2017-09-25 08:41:48

标签: java arrays

如果我得到一个随机数组,它确实找到了所有素数,但是当一个数字不是素数时,它将打印0而不是跳过该数字。 这是我写过的一段代码。

public static boolean isPrime(int el) {
    if (el > 1) {
        for (int i = 2; i < el; i++) {
            if (el % i == 0) {
            return false;
            }
        }
        return true;
    }
    throw new IllegalArgumentException();
}
public static int countPrimes(int[] seq) {
    int C = 0;
    for (int n = 0; n < seq.length; n++) {
        if (isPrime(seq[n])) {
            C++;
        }
    }
    return C;
}
public static int[] primesIn(int[] seq) {
    int[] Array = new int [countPrimes(seq)];
    for (int i = 0; i < countPrimes(seq); i++) {
        if (isPrime(seq[i])) {
            Array[i] = seq [i];
        }
    }
    return Array;
}

如果我得到以下数组:new int [] {167,173,179,191,31,89}。

它将返回:[167,173,179,0,191,31]。 我不被允许使用列表和其他东西而不是普通数组。

提前致谢!

2 个答案:

答案 0 :(得分:0)

由于您要检查所有输入数字,但只输出素数到数组,您需要2个索引 - 一个(i)遍历输入数组的索引,另一个( count)遍及输出数组的索引:

int count = 0;
for (int i = 0; i < seq.length; i++) {
    if (isPrime(seq[i])) {
        Array[count++] = seq[i];
    }
}

测试:

输入:

System.out.println (Arrays.toString (primesIn(new int[]{10, 13, 15, 17, 19, 20})));

输出:

[13, 17, 19]

答案 1 :(得分:0)

isPrime函数中存在性能问题。要找到一个不是你不需要数字的数字,你需要直到sqrt(n)

public static boolean isPrime(int el) {
if (el > 1) {
    int elsqrt= sqrt(el); // EDIT we don't want to do sqrt every time
    for (int i = 2; i < elsqrt; i++) {
        if (el % i == 0) {
        return false;
        }
    }
    return true;
 }
 throw new IllegalArgumentException();
}

这使程序更快。