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 Affine Cipher
Truyền giá trị và tham chiếu trong java
StringBuilder vs StringBuffer in Java
Adding Shutdown Hooks for JVM Applications
Spring Cloud AWS – Messaging Support
Migrating from JUnit 4 to JUnit 5
Intro to Inversion of Control and Dependency Injection with Spring
Send email with JavaMail
Java Program to Implement Dijkstra’s Algorithm using Set
Java Program to Implement Segment Tree
Java Program to Implement Cubic convergence 1/pi Algorithm
Logout in an OAuth Secured Application
Hướng dẫn Java Design Pattern – Mediator
Java Deep Learning Essentials - Yusuke Sugomori
Spring Data Java 8 Support
Java Program to Implement Triply Linked List
Java – Convert File to InputStream
JPA/Hibernate Persistence Context
Spring 5 Testing with @EnabledIf Annotation
Java Program to Implement Radix Sort
Lập trình đa luồng với Callable và Future trong Java
Giới thiệu JDBC Connection Pool
Creating Docker Images with Spring Boot
Lập trình hướng đối tượng (OOPs) trong java
Java – InputStream to Reader
Java Program to Optimize Wire Length in Electrical Circuit
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Serverless Functions with Spring Cloud Function
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
@Lookup Annotation in Spring
Spring Cloud AWS – RDS
Semaphore trong Java