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 Encode a Message Using Playfair Cipher
Java Program to Find kth Smallest Element by the Method of Partitioning the Array
Spring Cloud – Adding Angular
Creating Docker Images with Spring Boot
Prevent Brute Force Authentication Attempts with Spring Security
Spring Boot - Admin Client
Java Program to Solve Knapsack Problem Using Dynamic Programming
Biểu thức Lambda trong Java 8 – Lambda Expressions
HttpClient 4 – Follow Redirects for POST
Java Program to Implement Patricia Trie
Java Program to Implement Dijkstra’s Algorithm using Queue
Java Program to Implement CountMinSketch
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
A Guide to JUnit 5
JUnit 5 for Kotlin Developers
Creating a Generic Array in Java
HttpClient Basic Authentication
Java Program to Find Shortest Path Between All Vertices Using Floyd-Warshall’s Algorithm
Test a REST API with Java
Lớp lồng nhau trong java (Java inner class)
Java Program to Implement Sorting of Less than 100 Numbers in O(n) Complexity
The Difference Between Collection.stream().forEach() and Collection.forEach()
A Guide to BitSet in Java
Introduction to Spliterator in Java
Reading an HTTP Response Body as a String in Java
Debug a HttpURLConnection problem
Spring Boot - Apache Kafka
Java Program to Implement the Checksum Method for Small String Messages and Detect
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Java Program to Implement Heap’s Algorithm for Permutation of N Numbers
Convert Time to Milliseconds in Java
Hướng dẫn Java Design Pattern – Visitor