From 35e41b7c355c512a2c9646706458f4ed2c963898 Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 18:59:02 +0530 Subject: [PATCH 1/2] Added Karatsuba's multiplication algorithm --- .../KaratsubaMultiplication.java | 52 +++++++++++++++++++ 1 file changed, 52 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..d9c614e7cd82 --- /dev/null +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -0,0 +1,52 @@ +// Karatsuba Multiplication Algorithm +// +// -----References----- +// https://en.wikipedia.org/wiki/Karatsuba_algorithm +// https://www.geeksforgeeks.org/dsa/karatsuba-algorithm-for-fast-multiplication-using-divide-and-conquer-algorithm/ + +import java.util.Scanner; + +public final 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) { + if (x < 10 || y < 10) { + return x * y; + } + + int n = Math.max(Long.toString(x).length(), Long.toString(y).length()); + int m = n / 2; + + 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); + + long z0 = karatsuba(low1, low2); + long z1 = karatsuba(low1 + high1, low2 + high2); + long z2 = karatsuba(high1, high2); + + 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 82faac704dfc586a39aeeebf9699926e49346049 Mon Sep 17 00:00:00 2001 From: Adesh Date: Wed, 1 Oct 2025 19:13:43 +0530 Subject: [PATCH 2/2] Added Karatsuba's multiplication algorithm --- .../KaratsubaMultiplication.java | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java index d9c614e7cd82..6be3eab7c385 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java +++ b/src/main/java/com/thealgorithms/divideandconquer/KaratsubaMultiplication.java @@ -4,7 +4,7 @@ // https://en.wikipedia.org/wiki/Karatsuba_algorithm // https://www.geeksforgeeks.org/dsa/karatsuba-algorithm-for-fast-multiplication-using-divide-and-conquer-algorithm/ -import java.util.Scanner; +package com.thealgorithms.divideandconquer; public final class KaratsubaMultiplication { @@ -33,20 +33,5 @@ public static long karatsuba(long x, long y) { 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(); - } } +