метод возведения в квадрат всегда - PullRequest
0 голосов
/ 13 июня 2018

Помимо метода квадрата и умножения, есть этот метод квадрата и умножения-всегда, и я пытаюсь реализовать его в Python.Моя проблема в том, что во время поиска я нашел для него псевдокод здесь и реализовал его в python, но он не дает правильных результатов по сравнению с функцией pow.
Псевдокод можно найти вссылка выше или на этом скриншоте .

Моя реализация

def square_and_multiply_always(base, exp, mod):
    R0=1
    R1 = base
    c = '{0:b}'.format(exp)
    i=len(c)
    t=0
    while i>=0:
        if(t==0):
            Rt=R0
        elif(t==1):
            Rt=R1
        else:
             print("t != 0 or 1")
        R0=(R0*Rt)%mod
        a=int(c[i-1])
        t=(t^a)
        i=i-1+t
    return R0

1 Ответ

0 голосов
/ 13 июня 2018

мне удалось найти свои ошибки, поэтому вот правильный код для будущих поисков, которые заканчиваются здесь

def square_and_multiply_always(base, exp, mod):
    R0=1
    R1 = base
    c = '{0:b}'.format(exp)
    i=len(c)-1
    t=0
    c=c[::-1]
    while(i>=0):
        if(t==0):
            Rt=R0
        elif(t==1):
            Rt=R1
        else:
            print("t != 0 or 1")
        R0=(R0*Rt)%mod
        d=int(c[i])
        t=(t^d)
        i=i-1+t
    return R0
...