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 Bubble Sort
CyclicBarrier in Java
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Create Java Applet to Simulate Any Sorting Technique
Java Timer
Supplier trong Java 8
Comparing Long Values in Java
Redirect to Different Pages after Login with Spring Security
Java Program to Generate Date Between Given Range
Guide to @JsonFormat in Jackson
Java Program to Implement Brent Cycle Algorithm
Spring Boot - Hystrix
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
JPA/Hibernate Persistence Context
Java – Write an InputStream to a File
Java Program to Implement Singly Linked List
Write/Read cookies using HTTP and Read a file from the internet
Guide to @ConfigurationProperties in Spring Boot
RestTemplate Post Request with JSON
Marker Interface trong Java
Java Program to Check the Connectivity of Graph Using BFS
Using JWT with Spring Security OAuth (legacy stack)
Filtering and Transforming Collections in Guava
Spring Boot - Tomcat Port Number
Removing all Nulls from a List in Java
Java Program to Implement Graph Structured Stack
Java Program to Apply Above-Below-on Test to Find the Position of a Point with respect to a Line
Hướng dẫn Java Design Pattern – Visitor
Mapping a Dynamic JSON Object with Jackson
Converting a Stack Trace to a String in Java
Guide to Dynamic Tests in Junit 5
The HttpMediaTypeNotAcceptableException in Spring MVC