/ Published in: Java
An example of Karatsuba algorithm for multiplication of n digit numbers.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
import java.math.BigInteger; import java.util.Random; import java.io.*; public class Karatsuba { /** * M���©todo que mediante la t���©cnica divide y vencer���¡s, multiplica dos n���ºmeros * muy grandes tras una serie de pasos. * @param u BigInteger Entero grande 1. * @param v BigInteger Entero grande 2. * @return BigInteger Resultado * JOSE PINO */ //Para n menor que mil, es m���¡s eficiente la multiplicaci���³n normal. if (posiciones <= 1000) { return u.multiply(v); } posiciones = posiciones / 2; /* * Repartimos en trocitos: * u = w * 2^n + x * v = y * 2^n + z */ // Calculamos los resultados parciales // Se juntan los resultados parciales para obtener el resultado global. return p.shiftLeft(2 * posiciones).add(z1.shiftLeft(posiciones)).add(q); } "Introduzca un n���ºmero de bits(Sugerencia: A poder ser mayor que 1000): "); try { //Creamos dos n���ºmeros al azar de N cifras. //System.out.println("Numero 1: " + x); //System.out.println("\n\nNumero 2: " + y); //Mediremos los tiempos de Karatsuba y Multiplicaci���³n normal para ver las diferencias. //z serÃ��Ã�ÂÂa el resultado. Hacemos la llamada al m���©todo. z = x.multiply(y); } } } } } }