forpin primes:
forzinrange(p):
y2= p +2* z * z
if y2 <=0:
breaky, flg= sympy.integer_nthroot(y2, 2)
if flg:
assert p == y * y -2* z * z
print(f"{p:3} = {y:2}^2 - 2 * {z:2}^2")
# 複数あるが、最初のひとつ以外は除外するbreak
import itertools
import functools
@lru_cache(maxsize=1000)def_calc(i, ind):
return i * (10**ind)
defMunchhausen(n_digits=4):
ret = []
values = [(i, i**i) fori in range(1, 10)]
forx in itertools.product(*[values]*n_digits):
a = 0b = 0forind, (i, iv) in enumerate(x):
a += _calc(i, ind)
b += iv
if a == b:
ret.append(a)
return ret
fori in range(1, 7):
print(i, Munchhausen(i))