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 Circular Buffer
The DAO with Spring and Hibernate
Spring Boot - Servlet Filter
Java Program to Emulate N Dice Roller
HttpClient Timeout
Introduction to Spring Security Expressions
Java Program to Represent Graph Using Adjacency Matrix
Guide to java.util.concurrent.BlockingQueue
Java Program to Implement Hash Tables Chaining with Binary Trees
Check If a File or Directory Exists in Java
Remove HTML tags from a file to extract only the TEXT
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
Map Interface trong java
A Guide to Spring Boot Admin
Sorting Query Results with Spring Data
Spring Boot - Enabling Swagger2
How to Iterate Over a Stream With Indices
How to Manually Authenticate User with Spring Security
Returning Custom Status Codes from Spring Controllers
Life Cycle of a Thread in Java
Servlet 3 Async Support with Spring MVC and Spring Security
Java Multi-line String
Registration – Password Strength and Rules
Giới thiệu Json Web Token (JWT)
Introduction to Spring Data MongoDB
Quick Guide to java.lang.System
Spring Boot - Service Components
Getting Started with Forms in Spring MVC
A Guide to Java HashMap
Spring Cloud Series – The Gateway Pattern
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
String Operations with Java Streams