[英]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.