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:
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Java Streams vs Vavr Streams
Java Collections Interview Questions
Java Program to Implement Direct Addressing Tables
Sort a HashMap in Java
Lập trình hướng đối tượng (OOPs) trong java
Spring Cloud Bus
Java – Rename or Move a File
New Features in Java 14
Tổng quan về ngôn ngữ lập trình java
Converting a Stack Trace to a String in Java
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Getting Started with Stream Processing with Spring Cloud Data Flow
Reading an HTTP Response Body as a String in Java
Java Program to Find Transpose of a Graph Matrix
Spring Boot - File Handling
The Thread.join() Method in Java
Java Program to Represent Graph Using Adjacency List
Java – String to Reader
Java Program to Convert a Decimal Number to Binary Number using Stacks
Java Program to Implement Knight’s Tour Problem
Hướng dẫn Java Design Pattern – Proxy
Java Program to Implement Park-Miller Random Number Generation Algorithm
Introduction to Spring Cloud OpenFeign
Intro to the Jackson ObjectMapper
Java Program to Check whether Graph is a Bipartite using DFS
Introduction to Thread Pools in Java
Java Switch Statement
Spring @RequestMapping New Shortcut Annotations
Spring Boot: Customize Whitelabel Error Page
Java Program to Find Basis and Dimension of a Matrix