que me han dado el siguiente algoritmo que calcula es donde s = g^u mod p en Python:cálculos de módulo rápidos en Python y Ruby
def modexp (g, u, p):
"""computes s = (g^u) mod p
args are base, exponent, modulus
(see Bruce Schneier's book, _Applied Cryptography_ p. 244)"""
s = 1
while u != 0:
if u & 1:
s = (s * g)%p
u >>= 1
g = (g * g)%p;
return s
Sin embargo, al convertir el código a Ruby como tal :
def modexp (g, u, p)
s = 1
while u != 0
if u & 1
s = (s * g)%p
end
u >>= 1
g = (g * g)%p
end
return s
end
Tengo salida diferente. Por ejemplo:
Python 2.7 (r27:82500, Oct 6 2010, 12:29:13)
[GCC 4.5.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import modexp
>>> modexp.modexp(96,25,17)
6
que es la respuesta correcta a partir del código Python en comparación con
>> require './modexp.rb'
=> true
>> modexp(96,25,17)
=> 14
¿Alguien puede explicar esto? Por lo que he leído Python y Ruby tienen la misma sintaxis para bitshift y bitwise y se usan en el código, así que no creo que sea eso. ¿Alguien tiene alguna otra idea?
¿Por qué no depura el código para encontrar la línea donde difieren los valores? –