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:
Immutable ArrayList in Java
Giới thiệu java.io.tmpdir
Java Program to Perform Polygon Containment Test
Merging Two Maps with Java 8
A Custom Data Binder in Spring MVC
Template Engines for Spring
Jackson Ignore Properties on Marshalling
How To Serialize and Deserialize Enums with Jackson
Implementing a Runnable vs Extending a Thread
Java Program to Implement Bucket Sort
Spring Data JPA @Modifying Annotation
New Features in Java 8
OAuth2 Remember Me with Refresh Token
Java Program to Check if any Graph is Possible to be Constructed for a Given Degree Sequence
Java Optional as Return Type
Java Program to Implement Suffix Array
Java Program to Implement Sieve Of Atkin
@Lookup Annotation in Spring
Java Program to Implement LinkedHashSet API
String Initialization in Java
Supplier trong Java 8
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Lấy ngày giờ hiện tại trong Java
Introduction to Spring Data REST
Set Interface trong Java
Java Program to Implement WeakHashMap API
Abstract class và Interface trong Java
Injecting Prototype Beans into a Singleton Instance in Spring
Exploring the Spring Boot TestRestTemplate
Java Program to Solve any Linear Equation in One Variable
Java Program to Implement Shell Sort
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull