From 17ae92c84f7bbb1c9be87a2b2aa58503009d93b2 Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 18:16:58 +0530 Subject: [PATCH 1/5] Added Karatsuba's multiplication algorithm --- .../KaratsubaMultiplication.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java diff --git a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java new file mode 100644 index 000000000000..250f520e9f09 --- /dev/null +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -0,0 +1,47 @@ +import java.util.Scanner; + +public class KaratsubaMultiplication { + + // Karatsuba multiplication function + public static long karatsuba(long x, long y) { + // Base case for recursion + if (x < 10 || y < 10) { + return x * y; + } + + // Calculate the size of the numbers + int n = Math.max(Long.toString(x).length(), Long.toString(y).length()); + int m = n / 2; + + // Split the digit sequences about the middle + long high1 = x / (long) Math.pow(10, m); + long low1 = x % (long) Math.pow(10, m); + long high2 = y / (long) Math.pow(10, m); + long low2 = y % (long) Math.pow(10, m); + + // 3 recursive calls + long z0 = karatsuba(low1, low2); + long z1 = karatsuba(low1 + high1, low2 + high2); + long z2 = karatsuba(high1, high2); + + // Combine the results + return (z2 * (long) Math.pow(10, 2 * m)) + ((z1 - z2 - z0) * (long) Math.pow(10, m)) + z0; + } + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + System.out.print("Enter first number: "); + long num1 = sc.nextLong(); + + System.out.print("Enter second number: "); + long num2 = sc.nextLong(); + + long result = karatsuba(num1, num2); + + System.out.println("Product: " + result); + + sc.close(); + } +} + From df3900aebeddbcf8a8341655f0880ba5aa454dac Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 18:29:31 +0530 Subject: [PATCH 2/5] Added Karatsuba's multiplication algorithm --- .../divideandconquer/KaratsubaMultiplication.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java index 250f520e9f09..aa47722b5482 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -1,3 +1,7 @@ +// Karatsuba Multiplication Algorithm +// Explanation: https://en.wikipedia.org/wiki/Karatsuba_algorithm + + import java.util.Scanner; public class KaratsubaMultiplication { @@ -44,4 +48,3 @@ public static void main(String[] args) { sc.close(); } } - From 5d285df0ce9ea2c9f806640286fc605747c28c5d Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 18:35:45 +0530 Subject: [PATCH 3/5] Added Karatsuba's multiplication algorithm --- .../divideandconquer/KaratsubaMultiplication.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java index aa47722b5482..c5e6d63001b1 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -1,34 +1,33 @@ // Karatsuba Multiplication Algorithm // Explanation: https://en.wikipedia.org/wiki/Karatsuba_algorithm - import java.util.Scanner; public class KaratsubaMultiplication { + // Private constructor to prevent instantiation + private KaratsubaMultiplication() { + throw new UnsupportedOperationException("Utility class"); + } + // Karatsuba multiplication function public static long karatsuba(long x, long y) { - // Base case for recursion if (x < 10 || y < 10) { return x * y; } - // Calculate the size of the numbers int n = Math.max(Long.toString(x).length(), Long.toString(y).length()); int m = n / 2; - // Split the digit sequences about the middle long high1 = x / (long) Math.pow(10, m); long low1 = x % (long) Math.pow(10, m); long high2 = y / (long) Math.pow(10, m); long low2 = y % (long) Math.pow(10, m); - // 3 recursive calls long z0 = karatsuba(low1, low2); long z1 = karatsuba(low1 + high1, low2 + high2); long z2 = karatsuba(high1, high2); - // Combine the results return (z2 * (long) Math.pow(10, 2 * m)) + ((z1 - z2 - z0) * (long) Math.pow(10, m)) + z0; } From f7d036dfc343af76cc6b34c582c1ac96720e0a77 Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 18:37:39 +0530 Subject: [PATCH 4/5] Added Karatsuba's multiplication algorithm --- .../thealgorithms/divideandconquer/KaratsubaMultiplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java index c5e6d63001b1..335e1c72b055 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -1,5 +1,5 @@ // Karatsuba Multiplication Algorithm -// Explanation: https://en.wikipedia.org/wiki/Karatsuba_algorithm +// Reference: https://en.wikipedia.org/wiki/Karatsuba_algorithm import java.util.Scanner; From ea7f83232366be25542233c72b5e9301f4d635b9 Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 18:41:43 +0530 Subject: [PATCH 5/5] Added Karatsuba's multiplication algorithm --- .../thealgorithms/divideandconquer/KaratsubaMultiplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java index 335e1c72b055..eed5e1b1d6c0 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -3,7 +3,7 @@ import java.util.Scanner; -public class KaratsubaMultiplication { +public final class KaratsubaMultiplication { // Private constructor to prevent instantiation private KaratsubaMultiplication() {