def make_sq(x, y):
sq = set([(x, y)])
u, v = x, y
while v > 0:
u, v = v, u % v
if u > 0 and v > 0:
sq.add((u, v))
o1 = set([(abs(x - y), y) for x, y in sq if x != y])
o2 = set([(x, abs(x - y)) for x, y in sq if x != y])
return sq | o1 | o2
def make(x, y):
sq = make_sq(x, y)
while 1:
n = len(sq)
nsq = set(sq)
for u, v in sq:
nsq |= make_sq(u, v)
if len(nsq) == n:
break
sq = nsq
return sq
from collections import deque
def solve(x1, y1, x2, y2):
s1 = make(x1, y1)
s2 = make(x2, y2)
graph = s1 | s2
print(len(graph))
commons = s1 & s2
# def get_path(x, y, x0, y0):
# q = dequeue([((x0, y0), [(x0, y0)])])
# seen = set([(x0 , y0)])
# while q:
# ele, path = q.pop()
print(solve(641,40,213,499))
To embed this project on your website, copy the following code and paste it into your website's HTML: