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))

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: