extended euclidean algorithm and the concept of multiplicative inverse

后端 未结 2 1005
迷失自我
迷失自我 2020-12-21 13:48

I have with python:

e*d == 1%etf

we know (e) and (etf) and must discover (d) using the extended euclidean algorithm and the concept of mul

相关标签:
2条回答
  • 2020-12-21 14:19

    Here's an implementation of the extended Euclidean algorithm. I've taken the code from this answer, generalised it so that it works with moduli other than 262, and converted it from Java to Python:

    def multiplicativeInverse(x, modulus):
        if modulus <= 0:
           raise ValueError("modulus must be positive")
    
        a = abs(x)
        b = modulus
        sign = -1 if x < 0 else 1
    
        c1 = 1
        d1 = 0
        c2 = 0
        d2 = 1
    
        # Loop invariants:
        # c1 * abs(x) + d1 * modulus = a
        # c2 * abs(x) + d2 * modulus = b 
    
        while b > 0:
            q = a / b
            r = a % b
            # r = a - qb.
    
            c3 = c1 - q*c2
            d3 = d1 - q*d2
    
            # Now c3 * abs(x) + d3 * modulus = r, with 0 <= r < b.
    
            c1 = c2
            d1 = d2
            c2 = c3
            d2 = d3
            a = b
            b = r
    
        if a != 1:
            raise ValueError("gcd of %d and %d is %d, so %d has no "
                             "multiplicative inverse modulo %d"
                             % (x, modulus, a, x, modulus))
    
        return c1 * sign;
    
    0 讨论(0)
  • 2020-12-21 14:24

    The trick you list with d = (e**(etf-2)) % etf will work only if etf is prime. If it's not, you have to use the EEA itself to find the modular multiplicative inverse.

    0 讨论(0)
提交回复
热议问题