![](/img/trans.png)
[英]I have a question with the logic of a program that checks if a number is prime. (I have to use 3 methods)
[英]This is my function for determining if a number is prime. I believe it is correct, but it keeps failing a unit test
這是我的代碼塊,用於確定一個數字是否為質數,這實際上是一個簡單的問題。 但是,它沒有通過單元測試,我不知道為什么。 我嘗試了不同的原始變量類型,但無濟於事。 它通過了所有明確的測試用例,所以我不知道 n 的哪個值沒有正確檢查其主要狀態。
public static boolean isPrime(int n) {
boolean f = true;
if (n % 2 == 0) {
return false;
}
double sqrt = Math.sqrt(n);
for (int i = 3; i <= sqrt; i++) {
if (((n % i) == 0)) {
f = false;
break;
}
}
return f;
}
有問題的單元測試給出了結果:
java.lang.AssertionError:預期:783904569 實際:3149358104
這是單元測試代碼
CRC32 check = new CRC32();
for(int k = 0; k < 10_000_000; k++) {
if(Primes.isPrime(k)) { check.update(k); }
}
assertEquals(783904569L, check.getValue());
}
我已經嘗試了一切合理的方法,包括以不同的方式重新編寫代碼,但它一直給出相同的答案。
你的isPime()
有兩個錯誤:
如果將以下內容添加到方法的開頭,則測試通過:
if (n == 1) return false;
if (n == 2) return true;
您可以使用Sieve of Eratosthenes加快速度。
static final int MAX_PRIMES = 10_000_000 + 1;
static final boolean[] PRIMES = new boolean[MAX_PRIMES];
static {
Arrays.fill(PRIMES, true);
PRIMES[0] = PRIMES[1] = false;
for (int i = 2, end = (int)Math.sqrt(MAX_PRIMES); i <= end; ++i)
for (int j = i + i; j < MAX_PRIMES; j += i)
PRIMES[j] = false;
}
public static boolean isPrime(int n) {
return PRIMES[n];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.