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 Second Smallest of n Elements with Given Complexity Constraint
An Example of Load Balancing with Zuul and Eureka
New Features in Java 15
Chuyển đổi từ HashMap sang ArrayList
Java Program to Implement the MD5 Algorithm
Spring Boot - Code Structure
Guide to @ConfigurationProperties in Spring Boot
List Interface trong Java
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
Java Program to Implement wheel Sieve to Generate Prime Numbers Between Given Range
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
The StackOverflowError in Java
Introduction to the Java NIO Selector
XML-Based Injection in Spring
Quick Intro to Spring Cloud Configuration
The Registration API becomes RESTful
Request Method Not Supported (405) in Spring
Java Program to Perform Insertion in a BST
Registration with Spring Security – Password Encoding
Java Program to Implement Hash Tables with Double Hashing
Logout in an OAuth Secured Application
Most commonly used String methods in Java
Vòng lặp for, while, do-while trong Java
How to Get the Last Element of a Stream in Java?
Concatenating Strings In Java
Java Program to Implement Sieve Of Atkin
Spring Boot - Securing Web Applications
Returning Image/Media Data with Spring MVC
Object cloning trong java
Java Program to Represent Graph Using Adjacency Matrix
Java Program to Implement SimpeBindings API
Java Program to Implement Euclid GCD Algorithm