/ Published in: Java
An example of Karatsuba algorithm for multiplication of n digit numbers.
Expand |
Embed | Plain Text
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); } } } } } }
You need to login to post a comment.
