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:
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
A Guide to Java 9 Modularity
Java Program to Check Whether an Undirected Graph Contains a Eulerian Path
Quick Guide to Spring Controllers
Removing Elements from Java Collections
An Introduction to ThreadLocal in Java
Spring REST API + OAuth2 + Angular
Spring WebFlux Filters
Guide to the Volatile Keyword in Java
Guide to the ConcurrentSkipListMap
Get and Post Lists of Objects with RestTemplate
Introduction to Spring MVC HandlerInterceptor
A Guide to @RepeatedTest in Junit 5
Java Program to Implement RoleUnresolvedList API
Entity To DTO Conversion for a Spring REST API
Từ khóa this và super trong Java
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
Comparing Arrays in Java
Java Program to Implement Stack using Two Queues
Array to String Conversions
Using JWT with Spring Security OAuth
Java Program to Implement Strassen Algorithm
Sorting in Java
Java Program to Implement the Monoalphabetic Cypher
Receive email using POP3
Why String is Immutable in Java?
Interface trong Java 8 – Default method và Static method
Java Program to Implement Repeated Squaring Algorithm
Spring Boot - Actuator
Spring Boot - Interceptor
Spring Boot - Cloud Configuration Client