This is a Java Program to Implement Karatsuba Multiplication Algorithm. The Karatsuba algorithm is a fast multiplication algorithm. It was discovered by Anatolii Alexeevitch Karatsuba in 1960 and published in 1962. The Karatsuba algorithm was the first multiplication algorithm asymptotically faster than the quadratic “grade school” algorithm. It reduces the multiplication of two n-digit numbers to at most 3 n log 2 3 approx 3 n 1.585 single-digit multiplications in general.
Here is the source code of the Java Program to Implement Karatsuba Multiplication Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
* Java Program to Implement Karatsuba Multiplication Algorithm
**/
import java.util.Scanner;
/** Class Karatsuba **/
public class Karatsuba
{
/** Function to multiply two numbers **/
public long multiply(long x, long y)
{
int size1 = getSize(x);
int size2 = getSize(y);
/** Maximum of lengths of number **/
int N = Math.max(size1, size2);
/** for small values directly multiply **/
if (N < 10)
return x * y;
/** max length divided, rounded up **/
N = (N / 2) + (N % 2);
/** multiplier **/
long m = (long)Math.pow(10, N);
/** compute sub expressions **/
long b = x / m;
long a = x - (b * m);
long d = y / m;
long c = y - (d * N);
/** compute sub expressions **/
long z0 = multiply(a, c);
long z1 = multiply(a + b, c + d);
long z2 = multiply(b, d);
return z0 + ((z1 - z0 - z2) * m) + (z2 * (long)(Math.pow(10, 2 * N)));
}
/** Function to calculate length or number of digits in a number **/
public int getSize(long num)
{
int ctr = 0;
while (num != 0)
{
ctr++;
num /= 10;
}
return ctr;
}
/** Main function **/
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Karatsuba Multiplication Algorithm Test\n");
/** Make an object of Karatsuba class **/
Karatsuba kts = new Karatsuba();
/** Accept two integers **/
System.out.println("Enter two integer numbers\n");
long n1 = scan.nextLong();
long n2 = scan.nextLong();
/** Call function multiply of class Karatsuba **/
long product = kts.multiply(n1, n2);
System.out.println("\nProduct : "+ product);
}
}
Output:
Karatsuba Multiplication Algorithm Test Enter two integer numbers 24061994 28563 Product : 687282734622
Related posts:
Spring Security Basic Authentication
Spring WebFlux Filters
A Guide to Iterator in Java
Guide to the Java Clock Class
Java Program to Implement Max Heap
Why String is Immutable in Java?
Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java
Java TreeMap vs HashMap
Java Program to Check the Connectivity of Graph Using BFS
Logout in an OAuth Secured Application
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Java Program to Implement Word Wrap Problem
Guide to Spring @Autowired
Java Program to implement Array Deque
A Guide to HashSet in Java
Java Program to Find the Minimum value of Binary Search Tree
Java Program to Generate Random Hexadecimal Byte
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
Apache Tiles Integration with Spring MVC
Lập trình đa luồng với CompletableFuture trong Java 8
Converting Between Byte Arrays and Hexadecimal Strings in Java
Guide to Mustache with Spring Boot
Different Ways to Capture Java Heap Dumps
Java Program to Find kth Largest Element in a Sequence
Introduction to PCollections
Jackson JSON Views
Hướng dẫn kết nối cơ sở dữ liệu với Java JDBC
Hướng dẫn Java Design Pattern – Abstract Factory
Java – Rename or Move a File
Java Program to Implement the Alexander Bogomolny’s UnOrdered Permutation Algorithm for Elements Fro...
Java Program to Implement Sparse Array
Spring Boot - Unit Test Cases