Java Program to Implement Karatsuba Multiplication Algorithm

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 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:

Count Occurrences of a Char in a String
Java Program to Create the Prufer Code for a Tree
Deploy a Spring Boot App to Azure
Java – InputStream to Reader
Check if there is mail waiting
Hướng dẫn sử dụng Lớp FilePermission trong java
A Quick Guide to Spring MVC Matrix Variables
Entity To DTO Conversion for a Spring REST API
Java Program to Implement WeakHashMap API
Documenting a Spring REST API Using OpenAPI 3.0
Java Program to find the maximum subarray sum using Binary Search approach
Spring Boot - CORS Support
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
Immutable ArrayList in Java
Hướng dẫn sử dụng luồng vào ra ký tự trong Java
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Java Program to Implement Affine Cipher
Spring Boot Configuration with Jasypt
Java Program to add two large numbers using Linked List
Spring Boot - Cloud Configuration Client
Spring Boot Application as a Service
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Convert Hex to ASCII in Java
Spring Boot Tutorial – Bootstrap a Simple Application
Iterating over Enum Values in Java
Spring Boot - Google Cloud Platform
RestTemplate Post Request with JSON
Hướng dẫn Java Design Pattern – Intercepting Filter
Java 8 Stream findFirst() vs. findAny()
Notify User of Login From New Device or Location
Java Program to Find Shortest Path Between All Vertices Using Floyd-Warshall’s Algorithm