M = 2 * 10**5 + 1
sieve = [True] * M
sieve[0] = sieve[1] = False
for i in range(2, int(M**0.5) + 1):
    for j in range(2 * i, M, i):
        sieve[j] = False
                
def make_pairs(n):
    ans = []
    def find(m):
        if m == 1:
            return [[(1, 2)], 0]
        ts = []
        ns = set(range(1, 2 * m + 1))
        for p in range(2 * m + 1, 4 * m):
            if sieve[p]:
                print("p :", p)
                for k in range(m, 2 * m + 1):
                    if p - k < k:
                        ts.append((p - k, k))
                        ns.discard(k)
                        ns.discard(p - k)
                break
        return (ts, max(ns, default=0) // 2)
    while 2 * n > 1:
        a, _n = find(n)
        print(a, _n)
        ans.extend(a)
        n = _n
    return ans
# for n in range(1, 1001):
#     r = make_pairs(n)
#     print(r)
r = make_pairs(4)
print(r)



Embed on website

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