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:
Hướng dẫn sử dụng Java Generics
Summing Numbers with Java Streams
Posting with HttpClient
Java Program to Find Minimum Number of Edges to Cut to make the Graph Disconnected
Hướng dẫn sử dụng Lớp FilePermission trong java
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Life Cycle of a Thread in Java
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
HashSet trong Java hoạt động như thế nào?
Period and Duration in Java
Guide to java.util.concurrent.BlockingQueue
Introduction to Spliterator in Java
The StackOverflowError in Java
Generate Spring Boot REST Client with Swagger
Java Program to Implement Stack using Two Queues
JUnit5 Programmatic Extension Registration with @RegisterExtension
Removing all duplicates from a List in Java
The Modulo Operator in Java
A Custom Data Binder in Spring MVC
Practical Java Examples of the Big O Notation
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Recommended Package Structure of a Spring Boot Project
Lớp lồng nhau trong java (Java inner class)
Setting a Request Timeout for a Spring REST API
A Guide to Java HashMap
Một số tính năng mới về xử lý ngoại lệ trong Java 7
An Intro to Spring Cloud Security
Java Program to Perform Search in a BST
Hướng dẫn sử dụng Printing Service trong Java
Refactoring Design Pattern với tính năng mới trong Java 8
Spring MVC Async vs Spring WebFlux
Request Method Not Supported (405) in Spring