Мне дали следующий алгоритм, который вычисляет s, где s = g ^ u mod p в Python:
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
Однако, когда я конвертирую код в Ruby примерно так:
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
Я получаю другой вывод.Например:
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
Какой правильный ответ из кода Python по сравнению с
>> require './modexp.rb'
=> true
>> modexp(96,25,17)
=> 14
Может кто-нибудь объяснить это?Из того, что я прочитал, Python и Ruby имеют одинаковый синтаксис для битового сдвига и побитового кодирования и используются в коде, поэтому я не думаю, что это так.У кого-нибудь есть другие идеи?