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:
Flattening Nested Collections in Java
Serve Static Resources with Spring
Explain about URL and HTTPS protocol
Java Program to Implement Min Heap
Posting with HttpClient
Java Program to Implement Red Black Tree
Custom Exception trong Java
@Order in Spring
Java Program to Generate Random Numbers Using Middle Square Method
Java Program to Implement the Bin Packing Algorithm
Java Program to Implement Wagner and Fisher Algorithm for online String Matching
Java Program to Implement Lloyd’s Algorithm
DynamoDB in a Spring Boot Application Using Spring Data
New Features in Java 9
Spring Data JPA @Query
How to Convert List to Map in Java
Chuyển đổi Array sang ArrayList và ngược lại
“Stream has already been operated upon or closed” Exception in Java
Introduction to Spring Data JDBC
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
Java Program to Implement LinkedHashMap API
Adding a Newline Character to a String in Java
Jackson vs Gson
Registration – Password Strength and Rules
Java Program to Check the Connectivity of Graph Using BFS
Java equals() and hashCode() Contracts
Java Program to Implement the Hungarian Algorithm for Bipartite Matching
A Guide to Spring Boot Admin
Daemon Threads in Java
Hướng dẫn Java Design Pattern – Object Pool
Java Program to Solve a Matching Problem for a Given Specific Case
Java – Random Long, Float, Integer and Double