que han estado tratando de implementar un exponenciador modular recientemente. Estoy escribiendo el código en VHDL, pero estoy buscando consejos de naturaleza más algorítmica. El componente principal del exponenciador modular es un multiplicador modular que también tengo que implementar yo mismo. No he tenido ningún problema con el algoritmo de multiplicación, solo está agregando y cambiando, y he hecho un buen trabajo al determinar qué significan todas mis variables para poder multiplicarlas en un tiempo bastante razonable.formas mejores para poner en práctica una operación de módulo (pregunta algoritmo)
El problema que estoy teniendo es con la implementación de la operación de módulo en el multiplicador. Sé que realizar repetidas restas funcionará, pero también será lento. Descubrí que podía cambiar el módulo para restar efectivamente grandes múltiplos del módulo, pero creo que aún podría haber mejores formas de hacerlo. El algoritmo que estoy usando algo como esto funciona (pseudocódigo raro sigue):
result,modulus : integer (n bits) (previously defined)
shiftcount : integer (initialized to zero)
while((modulus<result) and (modulus(n-1) != 1)){
modulus = modulus << 1
shiftcount++
}
for(i=shiftcount;i>=0;i--){
if(modulus<result){result = result-modulus}
if(i!=0){modulus = modulus >> 1}
}
Así que ... esto es un buen algoritmo, o al menos un buen lugar para empezar? Wikipedia realmente no discute los algoritmos para implementar la operación de módulo, y cada vez que trato de buscar en otra parte, encuentro artículos de investigación y publicaciones realmente interesantes pero increíblemente complicados (ya menudo no relacionados). Si hay una forma obvia de implementar esto que no estoy viendo, realmente agradecería algunos comentarios.
es significativamente más lento que el de multiplicar? no parece que debería ser; tienes los mismos componentes básicos. –
Por cierto, también me siento frustrado con la forma en artículos de Wikipedia son escritos cada vez más por los matemáticos.El hecho de que algo se pueda expresar fácilmente usando conceptos avanzados y la notación no significa que sea la mejor manera de explicarlo ;-) Es similar a las discusiones sobre Stackoverflow frente a las de Mathoverflow. – phkahler