def shanks(p, alpha, beta): m = int(math.ceil(math.sqrt(p - 1))) inv_alpha, r, t = ex3.solve_bezout(alpha, p, 1) l1 = [0]*m l2 = [0]*m l1[0] = 0, alpha l1[1] = 1, pow(alpha, m)%p l2[0] = 0, beta l2[1] = 1, (beta*(inv_alpha))%p for j in xrange(2, m): l1[j] = (j, (l1[1][1]*l1[j - 1][1])%p) l2[j] = (j, (l2[j - 1][1]*inv_alpha)%p) for i in l1: for j in l2: if i[1] == j[1]: return m*i[0] + j[0]
t = 1 old_t = 0 r = b old_r = a while not r == 0: q = old_r//r (old_r, r) = (r, old_r - q*r) (old_s, s) = (s, old_s - q*s) (old_t, t) = (t, old_t - q*t) return old_r def brute_force_eq(a, b, c, it): for i in xrange(it): for j in xrange(it): if (a*i - b*j) == c: return (i, -1*j) if (a*i - b*j) < 0: break if __name__ == "__main__": print mdc(8765, 23485) print brute_force_eq(65537, 3511, 1, 10000000) print brute_force_eq(65537, 3511, 17, 10000000) print ex3.solve_bezout(17, 101, 1) print ex3.solve_bezout(357, 1234, 1) print ex3.solve_bezout(3125, 9987, 1)