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 Implement Jarvis Algorithm
Java Program to Implement Circular Singly Linked List
Java Program to Implement Direct Addressing Tables
Autoboxing và Unboxing trong Java
Prevent Cross-Site Scripting (XSS) in a Spring Application
Java Program to Implement Min Hash
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Java Program to Check Cycle in a Graph using Graph traversal
Java Program to Implement Gauss Jordan Elimination
Quick Guide to java.lang.System
Java Program to Implement ArrayList API
Spring Boot - Tracing Micro Service Logs
Creating Docker Images with Spring Boot
Hướng dẫn Java Design Pattern – Iterator
Hướng dẫn Java Design Pattern – Prototype
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
The Registration Process With Spring Security
List Interface trong Java
Send email with SMTPS (eg. Google GMail)
Guide to WeakHashMap in Java
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Java – Reader to InputStream
Java Program to Implement Interpolation Search Algorithm
Java Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
Implementing a Runnable vs Extending a Thread
Spring Boot - Sending Email
Copy a List to Another List in Java
Generating Random Dates in Java
Spring Boot With H2 Database
Guide to java.util.concurrent.BlockingQueue
Jackson Unmarshalling JSON with Unknown Properties
Transaction Propagation and Isolation in Spring @Transactional