potenciacion rapida

potenciacion rapida

de Rodrigo Jorgeluis Laguna Queirolo -
Número de respuestas: 2

Una consulta, el metodo de multiplicacion rapida que dimos en el curso, lo podemos implementar incluso sin el mod (N). Mi duda es qué es mas eficiente, implementarlo nosotros (basicamente tomar el del practico y "adaptarlo") o usar el que provee python (el operador **).
Saludos

En respuesta a Rodrigo Jorgeluis Laguna Queirolo

Re: potenciacion rapida

de Octavio Perez Kempner -

Hice una comparación GROSERA pero te la comento y por ahi a alguno mas le sirve.

En una PC de facultad corrí en 2 terminales 2 versiones de hallar_primo:

Versión A: Utilizó el algoritmo de exponenciación rápida visto en el práctico y una versión refinada del test de Miller-Rabin.

Versión B: Utilizó el algoritmo de exponenciación nativo de python (pow(x,y,[z])) y una versión "leal" al test de Miller-Rabin.

Test:

Se corrió 3 veces, para cada una de las versiones, un script que contenía:

Un for de 10000 iteraciones con hallar_primo

Un for de 5000 iteraciones con hallar_primo

Un for de 5000 iteraciones con hallar_primo

 

Resultado

En las 3 oportunidades la versión A finalizó cerca de los 2:30 minutos y 40 segundos antes que la versión B.

 

A pesar de que la comparación fue muy desprolija, 40 segundos parecería ser un dato significativo. Estaría bueno que alguno más se animara a aportar datos u algún marco de análisis más serio y ajustar las conclusiones.

 

Saludos,

Octavio

En respuesta a Rodrigo Jorgeluis Laguna Queirolo

Re: potenciacion rapida

de Nathan Ryan -

Ustedes deberían usar su propia implementación, no solamente por la razón que menciona Octavio.  El operador ** no es potenciación rápida porque no puede reducir módulo N cada vez que hace una multiplicación.

 
N