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:
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
Quick Guide to Spring Bean Scopes
Hashing a Password in Java
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Hướng dẫn sử dụng Printing Service trong Java
Java Program to Solve any Linear Equations
Receive email by java client
Cachable Static Assets with Spring MVC
Introduction to Java Serialization
Java Program to Implement Traveling Salesman Problem using Nearest neighbour Algorithm
Toán tử instanceof trong java
Constructor Injection in Spring with Lombok
Guide to Guava Multimap
Default Password Encoder in Spring Security 5
Luồng Daemon (Daemon Thread) trong Java
REST Web service: Tạo ứng dụng Java RESTful Client với Jersey Client 2.x
Guide to the Synchronized Keyword in Java
Apache Commons Collections OrderedMap
Java Program to Implement Binary Tree
Consumer trong Java 8
Java Program to Implement LinkedBlockingDeque API
Reactive WebSockets with Spring 5
How to Replace Many if Statements in Java
Spring Web Annotations
Java Program to Implement LinkedBlockingQueue API
Spring Boot - Creating Docker Image
Spring Boot Actuator
Handling URL Encoded Form Data in Spring REST
Java Program to Implement Red Black Tree
Converting between an Array and a List in Java
Java Program to Implement Stack using Linked List
Java Program to Generate All Possible Combinations Out of a, b, c, d, e