From cf5842a3abc18e1ab2f9d163218898c88015e340 Mon Sep 17 00:00:00 2001 From: vunamtien Date: Thu, 15 Feb 2024 21:54:14 +0700 Subject: [PATCH] BAEL-7358-find-prime-under-given (#15888) --- .../primeundernumber/LargestPrimeFinder.java | 43 +++++++++++++++++++ .../LargestPrimeFinderUnitTest.java | 32 ++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 algorithms-modules/algorithms-miscellaneous-7/src/main/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinder.java create mode 100644 algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinderUnitTest.java diff --git a/algorithms-modules/algorithms-miscellaneous-7/src/main/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinder.java b/algorithms-modules/algorithms-miscellaneous-7/src/main/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinder.java new file mode 100644 index 0000000000..bf4e785f29 --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-7/src/main/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinder.java @@ -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; + } +} diff --git a/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinderUnitTest.java b/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinderUnitTest.java new file mode 100644 index 0000000000..f046431424 --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/primeundernumber/LargestPrimeFinderUnitTest.java @@ -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)); + } +}