From fb8a86cbe11eb0f7e48d2de6e5785274992dd319 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 20:45:40 +0200 Subject: [PATCH 01/13] Added Goldbach's Conjecture algorithm. --- .../maths/GoldbachConjecture.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/main/java/com/thealgorithms/maths/GoldbachConjecture.java diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java new file mode 100644 index 000000000000..dc0a81ffc284 --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -0,0 +1,60 @@ +package com.thealgorithms.maths; + +import java.util.Scanner; + +import static java.lang.String.format; + +/** + * This is a representation of the unsolved problem of Goldbach's Projection, according to which every + * even natural number greater than 2 can be written as the sum of 2 prime numbers + * More info: https://en.wikipedia.org/wiki/Goldbach%27s_conjecture + * @author Vasilis Sarantidis (https://github.com/BILLSARAN) + */ + +public final class GoldbachConjecture { + private GoldbachConjecture() { + } + + /** + * Checks whether a number is prime or not + * @param n the input number + * @return true if n is prime, else return false + */ + private static boolean isPrime(int n) { + int i; + if (n <= 1 || (n % 2 == 0 && n != 2)) { + return false; + } + else { + for (i = 3; i < Math.sqrt(n); i += 2) { + if (n % i == 0) { + return false; + } + } + } + return true; + } + + public static void main(String[] args) { + + Scanner scanner = new Scanner(System.in); + System.out.println("Enter a number"); + int n = scanner.nextInt(); + int flag = 0; + + if (n % 2 == 0 && n > 2) { + for (int i = 0; i <= n/2 && flag == 0; i++) { + if (isPrime(i)) { + if (isPrime(n - i)) { + System.out.println(format("%d + %d = %d", i, n - i, n)); + flag = 1; + } + } + } + } + else { + System.out.println("Wrong Input"); + } + } + +} From d05ade37b6ced8ec445b9f6e2e10dd64708ca1f7 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 20:48:53 +0200 Subject: [PATCH 02/13] Added Goldbach's Conjecture algorithm. --- .../java/com/thealgorithms/maths/GoldbachConjecture.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index dc0a81ffc284..4ea70178d2ef 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -43,7 +43,7 @@ public static void main(String[] args) { int flag = 0; if (n % 2 == 0 && n > 2) { - for (int i = 0; i <= n/2 && flag == 0; i++) { + for (int i = 0; i <= n / 2 && flag == 0; i++) { if (isPrime(i)) { if (isPrime(n - i)) { System.out.println(format("%d + %d = %d", i, n - i, n)); @@ -51,8 +51,7 @@ public static void main(String[] args) { } } } - } - else { + } else { System.out.println("Wrong Input"); } } From 363a7b279b84a981f0d19518af9d748d4fbb09e7 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 20:49:15 +0200 Subject: [PATCH 03/13] Added Goldbach's Conjecture algorithm. --- src/main/java/com/thealgorithms/maths/GoldbachConjecture.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 4ea70178d2ef..7746d33d2179 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -24,8 +24,7 @@ private static boolean isPrime(int n) { int i; if (n <= 1 || (n % 2 == 0 && n != 2)) { return false; - } - else { + } else { for (i = 3; i < Math.sqrt(n); i += 2) { if (n % i == 0) { return false; From e1254ea3e677ea1d0db4dc605229becebf52396c Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 20:50:43 +0200 Subject: [PATCH 04/13] Added Goldbach's Conjecture algorithm. --- src/main/java/com/thealgorithms/maths/GoldbachConjecture.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 7746d33d2179..900b32894ca8 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -1,9 +1,9 @@ package com.thealgorithms.maths; -import java.util.Scanner; - import static java.lang.String.format; +import java.util.Scanner; + /** * This is a representation of the unsolved problem of Goldbach's Projection, according to which every * even natural number greater than 2 can be written as the sum of 2 prime numbers From bf54316443ac4dbdf9c7f639885da9c190a8ab46 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 20:51:35 +0200 Subject: [PATCH 05/13] Added Goldbach's Conjecture algorithm. --- src/main/java/com/thealgorithms/maths/GoldbachConjecture.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 900b32894ca8..202b1fef6757 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -54,5 +54,4 @@ public static void main(String[] args) { System.out.println("Wrong Input"); } } - } From 93b4e5e7d5a0176d63c9e6fea0e550581a35f4d4 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 20:59:42 +0200 Subject: [PATCH 06/13] Added Goldbach's Conjecture algorithm. --- src/main/java/com/thealgorithms/maths/GoldbachConjecture.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 202b1fef6757..8642af8d8a25 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -43,11 +43,9 @@ public static void main(String[] args) { if (n % 2 == 0 && n > 2) { for (int i = 0; i <= n / 2 && flag == 0; i++) { - if (isPrime(i)) { - if (isPrime(n - i)) { + if (isPrime(i) && isPrime(n - 1)) { System.out.println(format("%d + %d = %d", i, n - i, n)); flag = 1; - } } } } else { From 0ad77aee9fc7711df522a2e1b58796fd43479dd6 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 21:00:22 +0200 Subject: [PATCH 07/13] Added Goldbach's Conjecture algorithm. --- src/main/java/com/thealgorithms/maths/GoldbachConjecture.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 8642af8d8a25..07083f13e34b 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -43,7 +43,7 @@ public static void main(String[] args) { if (n % 2 == 0 && n > 2) { for (int i = 0; i <= n / 2 && flag == 0; i++) { - if (isPrime(i) && isPrime(n - 1)) { + if (isPrime(i) && isPrime(n - i)) { System.out.println(format("%d + %d = %d", i, n - i, n)); flag = 1; } From 2618a6434cc89e7ef9d977e7d84abc7af744beae Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Sat, 11 Jan 2025 21:01:27 +0200 Subject: [PATCH 08/13] Added Goldbach's Conjecture algorithm. --- src/main/java/com/thealgorithms/maths/GoldbachConjecture.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 07083f13e34b..0dc128e3af1e 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -44,8 +44,8 @@ public static void main(String[] args) { if (n % 2 == 0 && n > 2) { for (int i = 0; i <= n / 2 && flag == 0; i++) { if (isPrime(i) && isPrime(n - i)) { - System.out.println(format("%d + %d = %d", i, n - i, n)); - flag = 1; + System.out.println(format("%d + %d = %d", i, n - i, n)); + flag = 1; } } } else { From d63d0b47c9ad7318a67f3d7efbb7930cd0c9df20 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Mon, 13 Jan 2025 01:45:50 +0200 Subject: [PATCH 09/13] Changed GoldbachConjecture class and added Unit Tests for the Goldbach Conjecture algorithm --- .../maths/GoldbachConjecture.java | 37 ++++++------------- .../maths/GoldbachConjectureTest.java | 37 +++++++++++++++++++ 2 files changed, 48 insertions(+), 26 deletions(-) create mode 100644 src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 0dc128e3af1e..45a93298f735 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -1,5 +1,6 @@ package com.thealgorithms.maths; +import static com.thealgorithms.maths.PrimeCheck.isPrime; import static java.lang.String.format; import java.util.Scanner; @@ -15,23 +16,17 @@ public final class GoldbachConjecture { private GoldbachConjecture() { } - /** - * Checks whether a number is prime or not - * @param n the input number - * @return true if n is prime, else return false - */ - private static boolean isPrime(int n) { - int i; - if (n <= 1 || (n % 2 == 0 && n != 2)) { - return false; - } else { - for (i = 3; i < Math.sqrt(n); i += 2) { - if (n % i == 0) { - return false; + public static String getPrimeSum(int number){ + String s1; + if (number % 2 == 0 && number > 2) { + for (int i = 0; i <= number / 2; i++) { + if (isPrime(i) && isPrime(number - i)) { + s1 = format("%d + %d = %d", i, number - i, number); + return s1; } } } - return true; + return "Wrong Input"; } public static void main(String[] args) { @@ -39,17 +34,7 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter a number"); int n = scanner.nextInt(); - int flag = 0; - - if (n % 2 == 0 && n > 2) { - for (int i = 0; i <= n / 2 && flag == 0; i++) { - if (isPrime(i) && isPrime(n - i)) { - System.out.println(format("%d + %d = %d", i, n - i, n)); - flag = 1; - } - } - } else { - System.out.println("Wrong Input"); - } + String s = getPrimeSum(n); + System.out.println(s); } } diff --git a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java new file mode 100644 index 000000000000..66ca1e9b4826 --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java @@ -0,0 +1,37 @@ +package com.thealgorithms.maths; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static com.thealgorithms.maths.GoldbachConjecture.getPrimeSum; + +public class GoldbachConjectureTest { + @Test + void GoldbachTestWithZero() { + Assertions.assertEquals("Wrong Input", getPrimeSum(0)); + } + @Test + void GoldbachTestWithNegative() { + Assertions.assertEquals("Wrong Input", getPrimeSum(-50)); + } + @Test + void GoldbachTestWith2() { + Assertions.assertEquals("Wrong Input", getPrimeSum(2)); + } + @Test + void GoldbachTestWithOdd() { + Assertions.assertEquals("Wrong Input", getPrimeSum(25)); + } + @Test + void GoldbachTestEven1() { + Assertions.assertEquals("3 + 5 = 8", getPrimeSum(8)); + } + @Test + void GoldbachTestEven2() { + Assertions.assertEquals("3 + 19 = 22", getPrimeSum(22)); + } + @Test + void GoldbachTest1() { + Assertions.assertEquals("3 + 7 = 10", getPrimeSum(10)); + } +} From 4caecb0976ffbe74682dece4e105b04951fe4ac0 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Mon, 13 Jan 2025 01:54:13 +0200 Subject: [PATCH 10/13] Fixed formatting issues in GoldbachConjecture and the test class --- .../thealgorithms/maths/GoldbachConjecture.java | 2 +- .../maths/GoldbachConjectureTest.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 45a93298f735..2664666ecf9e 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -16,7 +16,7 @@ public final class GoldbachConjecture { private GoldbachConjecture() { } - public static String getPrimeSum(int number){ + public static String getPrimeSum(int number) { String s1; if (number % 2 == 0 && number > 2) { for (int i = 0; i <= number / 2; i++) { diff --git a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java index 66ca1e9b4826..d341ab6b63ea 100644 --- a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java +++ b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java @@ -7,31 +7,31 @@ public class GoldbachConjectureTest { @Test - void GoldbachTestWithZero() { + void goldbachTestWithZero() { Assertions.assertEquals("Wrong Input", getPrimeSum(0)); } @Test - void GoldbachTestWithNegative() { + void goldbachTestWithNegative() { Assertions.assertEquals("Wrong Input", getPrimeSum(-50)); } @Test - void GoldbachTestWith2() { + void goldbachTestWith2() { Assertions.assertEquals("Wrong Input", getPrimeSum(2)); } @Test - void GoldbachTestWithOdd() { + void goldbachTestWithOdd() { Assertions.assertEquals("Wrong Input", getPrimeSum(25)); } @Test - void GoldbachTestEven1() { + void goldbachTestEven1() { Assertions.assertEquals("3 + 5 = 8", getPrimeSum(8)); } @Test - void GoldbachTestEven2() { + void goldbachTestEven2() { Assertions.assertEquals("3 + 19 = 22", getPrimeSum(22)); } @Test - void GoldbachTest1() { + void goldbachTest1() { Assertions.assertEquals("3 + 7 = 10", getPrimeSum(10)); } } From 024aec24ea7fd124e10821631d06f3866bd8a236 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Mon, 13 Jan 2025 01:55:48 +0200 Subject: [PATCH 11/13] Fixed formatting issues in GoldbachConjectureTest --- .../java/com/thealgorithms/maths/GoldbachConjectureTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java index d341ab6b63ea..77a3e7cb47af 100644 --- a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java +++ b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java @@ -1,10 +1,9 @@ package com.thealgorithms.maths; +import static com.thealgorithms.maths.GoldbachConjecture.getPrimeSum; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static com.thealgorithms.maths.GoldbachConjecture.getPrimeSum; - public class GoldbachConjectureTest { @Test void goldbachTestWithZero() { From 004386a30d8ac08a495fc0f6a1d8e821de913369 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Mon, 13 Jan 2025 01:58:31 +0200 Subject: [PATCH 12/13] Fixed formatting issues in GoldbachConjectureTest --- .../java/com/thealgorithms/maths/GoldbachConjectureTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java index 77a3e7cb47af..bb3daaa687a2 100644 --- a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java +++ b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.maths; import static com.thealgorithms.maths.GoldbachConjecture.getPrimeSum; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; From 8f6c975028ad325ba817bc85e9e966400323b1d9 Mon Sep 17 00:00:00 2001 From: BILL_SARAN Date: Mon, 13 Jan 2025 21:04:35 +0200 Subject: [PATCH 13/13] Changed output of getPrimeSum method and added exceptions, modified JUnit Tests accordingly. --- .../maths/GoldbachConjecture.java | 32 ++++++---------- .../maths/GoldbachConjectureTest.java | 38 ++++++++----------- 2 files changed, 26 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java index 2664666ecf9e..52391bc100d8 100644 --- a/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java +++ b/src/main/java/com/thealgorithms/maths/GoldbachConjecture.java @@ -1,9 +1,6 @@ package com.thealgorithms.maths; import static com.thealgorithms.maths.PrimeCheck.isPrime; -import static java.lang.String.format; - -import java.util.Scanner; /** * This is a representation of the unsolved problem of Goldbach's Projection, according to which every @@ -15,26 +12,19 @@ public final class GoldbachConjecture { private GoldbachConjecture() { } - - public static String getPrimeSum(int number) { - String s1; - if (number % 2 == 0 && number > 2) { - for (int i = 0; i <= number / 2; i++) { - if (isPrime(i) && isPrime(number - i)) { - s1 = format("%d + %d = %d", i, number - i, number); - return s1; - } - } - } - return "Wrong Input"; + public record Result(int number1, int number2) { } - public static void main(String[] args) { + public static Result getPrimeSum(int number) { + if (number <= 2 || number % 2 != 0) { + throw new IllegalArgumentException("Number must be even and greater than 2."); + } - Scanner scanner = new Scanner(System.in); - System.out.println("Enter a number"); - int n = scanner.nextInt(); - String s = getPrimeSum(n); - System.out.println(s); + for (int i = 0; i <= number / 2; i++) { + if (isPrime(i) && isPrime(number - i)) { + return new Result(i, number - i); + } + } + throw new IllegalStateException("No valid prime sum found."); // Should not occur } } diff --git a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java index bb3daaa687a2..84c5824d26ae 100644 --- a/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java +++ b/src/test/java/com/thealgorithms/maths/GoldbachConjectureTest.java @@ -1,37 +1,29 @@ package com.thealgorithms.maths; import static com.thealgorithms.maths.GoldbachConjecture.getPrimeSum; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class GoldbachConjectureTest { @Test - void goldbachTestWithZero() { - Assertions.assertEquals("Wrong Input", getPrimeSum(0)); + void testValidEvenNumbers() { + assertEquals(new GoldbachConjecture.Result(3, 7), getPrimeSum(10)); // 10 = 3 + 7 + assertEquals(new GoldbachConjecture.Result(5, 7), getPrimeSum(12)); // 12 = 5 + 7 + assertEquals(new GoldbachConjecture.Result(3, 11), getPrimeSum(14)); // 14 = 3 + 11 + assertEquals(new GoldbachConjecture.Result(5, 13), getPrimeSum(18)); // 18 = 5 + 13 } @Test - void goldbachTestWithNegative() { - Assertions.assertEquals("Wrong Input", getPrimeSum(-50)); + void testInvalidOddNumbers() { + assertThrows(IllegalArgumentException.class, () -> getPrimeSum(7)); + assertThrows(IllegalArgumentException.class, () -> getPrimeSum(15)); } @Test - void goldbachTestWith2() { - Assertions.assertEquals("Wrong Input", getPrimeSum(2)); - } - @Test - void goldbachTestWithOdd() { - Assertions.assertEquals("Wrong Input", getPrimeSum(25)); - } - @Test - void goldbachTestEven1() { - Assertions.assertEquals("3 + 5 = 8", getPrimeSum(8)); - } - @Test - void goldbachTestEven2() { - Assertions.assertEquals("3 + 19 = 22", getPrimeSum(22)); - } - @Test - void goldbachTest1() { - Assertions.assertEquals("3 + 7 = 10", getPrimeSum(10)); + void testLesserThanTwo() { + assertThrows(IllegalArgumentException.class, () -> getPrimeSum(1)); + assertThrows(IllegalArgumentException.class, () -> getPrimeSum(2)); + assertThrows(IllegalArgumentException.class, () -> getPrimeSum(-5)); + assertThrows(IllegalArgumentException.class, () -> getPrimeSum(-26)); } }