簡體   English   中英

查找並返回數組中的所有素數。 爪哇

[英]Finding and returning all prime numbers in an array. JAVA

如果我得到一個隨機數組,它確實會找到所有素數,但是當一個數字不是素數時,它會打印一個 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 個索引 - 一個 ( 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]

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

這使程序更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM