Пример #1
0
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]
Пример #2
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)