import math
def search(n1, n2):
sieve = [(1, n) for n in range(n1, n2)]
i = 2
n2_sqrt = math.isqrt(n2)
while i <= n2_sqrt:
for k in range((i - n1) % i, n2 - n1, i):
d, n = sieve[k]
if d != 0 and n % i == 0:
n //= i
e = 1
while n % i == 0:
n //= i
e += 1
if e % 2 == 0:
sieve[k] = d * (e + 1), n
else:
sieve[k] = 0, 0
i += 1 if i == 2 else 2
for n, (d, j) in enumerate(sieve, start=n1):
if d != 0 and j == 1:
yield n, d
def main():
base = 1_850_000_000
m = 0
k = base // 2
step = 25000
while True:
for n, d in search(k, k + step):
print(2 * (n - base // 2), d)
m += 1
if m >= 5:
return
k += step
main()
aW1wb3J0IG1hdGgKCgpkZWYgc2VhcmNoKG4xLCBuMik6CiAgICBzaWV2ZSA9IFsoMSwgbikgZm9yIG4gaW4gcmFuZ2UobjEsIG4yKV0KICAgIGkgPSAyCiAgICBuMl9zcXJ0ID0gbWF0aC5pc3FydChuMikKICAgIHdoaWxlIGkgPD0gbjJfc3FydDoKICAgICAgICBmb3IgayBpbiByYW5nZSgoaSAtIG4xKSAlIGksIG4yIC0gbjEsIGkpOgogICAgICAgICAgICBkLCBuID0gc2lldmVba10KICAgICAgICAgICAgaWYgZCAhPSAwIGFuZCBuICUgaSA9PSAwOgogICAgICAgICAgICAgICAgbiAvLz0gaQogICAgICAgICAgICAgICAgZSA9IDEKICAgICAgICAgICAgICAgIHdoaWxlIG4gJSBpID09IDA6CiAgICAgICAgICAgICAgICAgICAgbiAvLz0gaQogICAgICAgICAgICAgICAgICAgIGUgKz0gMQogICAgICAgICAgICAgICAgaWYgZSAlIDIgPT0gMDoKICAgICAgICAgICAgICAgICAgICBzaWV2ZVtrXSA9IGQgKiAoZSArIDEpLCBuCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNpZXZlW2tdID0gMCwgMAogICAgICAgIGkgKz0gMSBpZiBpID09IDIgZWxzZSAyCiAgICBmb3IgbiwgKGQsIGopIGluIGVudW1lcmF0ZShzaWV2ZSwgc3RhcnQ9bjEpOgogICAgICAgIGlmIGQgIT0gMCBhbmQgaiA9PSAxOgogICAgICAgICAgICB5aWVsZCBuLCBkCgoKZGVmIG1haW4oKToKICAgIGJhc2UgPSAxXzg1MF8wMDBfMDAwCiAgICBtID0gMAogICAgayA9IGJhc2UgLy8gMgogICAgc3RlcCA9IDI1MDAwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGZvciBuLCBkIGluIHNlYXJjaChrLCBrICsgc3RlcCk6CiAgICAgICAgICAgIHByaW50KDIgKiAobiAtIGJhc2UgLy8gMiksIGQpCiAgICAgICAgICAgIG0gKz0gMQogICAgICAgICAgICBpZiBtID49IDU6CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICBrICs9IHN0ZXAKCgptYWluKCkK