BAEL-7358-find-prime-under-given (#15888)

This commit is contained in:
vunamtien 2024-02-15 21:54:14 +07:00 committed by GitHub
parent e2847c64c2
commit cf5842a3ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,43 @@
package com.baeldung.algorithms.primeundernumber;
import java.util.Arrays;
public class LargestPrimeFinder {
public static int findByBruteForce(int n) {
for (int i = n - 1; i >= 2; i--) {
if (isPrime(i)) {
return i;
}
}
return -1; // Return -1 if no prime number is found
}
public static boolean isPrime(int number) {
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
public static int findBySieveOfEratosthenes(int n) {
boolean[] isPrime = new boolean[n];
Arrays.fill(isPrime, true);
for (int p = 2; p*p < n; p++) {
if (isPrime[p]) {
for (int i = p * p; i < n; i += p) {
isPrime[i] = false;
}
}
}
for (int i = n - 1; i >= 2; i--) {
if (isPrime[i]) {
return i;
}
}
return -1;
}
}

View File

@ -0,0 +1,32 @@
package com.baeldung.algorithms.primeundernumber;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class LargestPrimeFinderUnitTest {
@Test
public void givenNormalCases_whenFindPrime_ThenFoundResult() {
assertEquals(7, LargestPrimeFinder.findByBruteForce(10));
assertEquals(97, LargestPrimeFinder.findByBruteForce(100));
assertEquals(7, LargestPrimeFinder.findBySieveOfEratosthenes(10));
assertEquals(97, LargestPrimeFinder.findBySieveOfEratosthenes(100));
}
@Test
public void givenEdgeCases_whenFindPrime_ThenNotFoundResult() {
assertEquals(-1, LargestPrimeFinder.findByBruteForce(0));
assertEquals(-1, LargestPrimeFinder.findByBruteForce(1));
assertEquals(-1, LargestPrimeFinder.findByBruteForce(2));
assertEquals(-1, LargestPrimeFinder.findBySieveOfEratosthenes(0));
assertEquals(-1, LargestPrimeFinder.findBySieveOfEratosthenes(1));
assertEquals(-1, LargestPrimeFinder.findBySieveOfEratosthenes(2));
}
@Test
public void givenLargeInput_whenFindPrime_ThenFoundResult() {
assertEquals(99991, LargestPrimeFinder.findByBruteForce(100000));
assertEquals(99991, LargestPrimeFinder.findBySieveOfEratosthenes(100000));
}
}