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:
Removing all Nulls from a List in Java
Java Program to Compute DFT Coefficients Directly
Using Spring ResponseEntity to Manipulate the HTTP Response
Guide to PriorityBlockingQueue in Java
Java Program to Find Whether a Path Exists Between 2 Given Nodes
Dynamic Proxies in Java
Error Handling for REST with Spring
Server-Sent Events in Spring
A Guide to Java 9 Modularity
Xây dựng ứng dụng Client-Server với Socket trong Java
Java Program to Implement VList
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing
Java Program to Solve the Fractional Knapsack Problem
The Basics of Java Security
Converting Between Byte Arrays and Hexadecimal Strings in Java
Java Program to Implement Binary Tree
New Features in Java 15
Java Program to Construct K-D Tree for 2 Dimensional Data
Java CyclicBarrier vs CountDownLatch
Từ khóa this và super trong Java
Java Program to Implement Sorting of Less than 100 Numbers in O(n) Complexity
Spring Boot - Apache Kafka
Java 8 – Powerful Comparison with Lambdas
Spring Cloud – Bootstrapping
Spring Boot - Introduction
Case-Insensitive String Matching in Java
Java 8 Predicate Chain
Spring Boot - Runners
Spring Boot Actuator
Map Serialization and Deserialization with Jackson
Introduction to Spring Boot CLI
HttpClient Timeout