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 – Reader to Byte Array
LinkedHashSet trong Java hoạt động như thế nào?
Hướng dẫn Java Design Pattern – Command
Từ khóa throw và throws trong Java
Apache Commons Collections MapUtils
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers
The Modulo Operator in Java
Java Program to Implement CountMinSketch
Java – Rename or Move a File
Java Program to Implement Hash Tables chaining with Singly Linked Lists
Converting Strings to Enums in Java
Giới thiệu Google Guice – Dependency injection (DI) framework
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng
Java Program to Implement HashTable API
REST Pagination in Spring
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Apache Camel with Spring Boot
Comparing Long Values in Java
Check If Two Lists are Equal in Java
Java InputStream to String
Vòng lặp for, while, do-while trong Java
Spring Boot Integration Testing with Embedded MongoDB
Java Program to Solve the 0-1 Knapsack Problem
Exploring the New Spring Cloud Gateway
Guide to UUID in Java
Java Program to Check if any Graph is Possible to be Constructed for a Given Degree Sequence
Request a Delivery / Read Receipt in Javamail
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Intro to Spring Boot Starters
Introduction to Spring Cloud Stream
Quick Intro to Spring Cloud Configuration
Spring Boot With H2 Database