Метод возведения в квадрат всегда

Помимо метода квадратного и умножения, есть этот метод квадратного и умножения всегда, и я пытаюсь реализовать его в 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 ответ

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

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
Другие вопросы по тегам