from random import randrange
_small_primes = set((2, 3, 5, 7, 11, 13, 17, 19, 23))
def is_prime(n, k=25):
if n in _small_primes:
return True
for pi in _small_primes:
if not n % pi:
return False
return False
d, s = n - 1, 0
while not d % 2:
d //= 2
s += 1
def is_spsp(n, a):
if t == 1:
return True
for _ in range(s):
if t == n - 1:
return True
t = (t * t) % n
return False
return all(is_spsp(n, randrange(2, n-1)) for _ in range(k))
def kalai(n):
while True:
s, r, si = n, 1, []
while s > 1:
s = randrange(1, s+1)
if is_prime(s):
r *= s
si.append(s)
if r <= n and randrange(1, n+1) <= r:
return r, list(reversed(si))
print(kalai(10**30))
ZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZQoKX3NtYWxsX3ByaW1lcyA9IHNldCgoMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzKSkKCmRlZiBpc19wcmltZShuLCBrPTI1KToKICAgIG4gPSBhYnMobikKICAgIGlmIG4gaW4gX3NtYWxsX3ByaW1lczoKICAgICAgICByZXR1cm4gVHJ1ZQogICAgZm9yIHBpIGluIF9zbWFsbF9wcmltZXM6CiAgICAgICAgaWYgbm90IG4gJSBwaToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiBwb3coMiwgbi0xLCBuKSAhPSAxOgogICAgICAgIHJldHVybiBGYWxzZQogICAgZCwgcyA9IG4gLSAxLCAwCiAgICB3aGlsZSBub3QgZCAlIDI6CiAgICAgICAgZCAvLz0gMgogICAgICAgIHMgKz0gMQoKICAgIGRlZiBpc19zcHNwKG4sIGEpOgogICAgICAgIHQgPSBwb3coYSwgZCwgbikKICAgICAgICBpZiB0ID09IDE6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZm9yIF8gaW4gcmFuZ2Uocyk6CiAgICAgICAgICAgIGlmIHQgPT0gbiAtIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICB0ID0gKHQgKiB0KSAlIG4KICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiBhbGwoaXNfc3BzcChuLCByYW5kcmFuZ2UoMiwgbi0xKSkgZm9yIF8gaW4gcmFuZ2UoaykpCgoKZGVmIGthbGFpKG4pOgogICAgd2hpbGUgVHJ1ZToKICAgICAgICBzLCByLCBzaSA9IG4sIDEsIFtdCiAgICAgICAgd2hpbGUgcyA+IDE6CiAgICAgICAgICAgIHMgPSByYW5kcmFuZ2UoMSwgcysxKQogICAgICAgICAgICBpZiBpc19wcmltZShzKToKICAgICAgICAgICAgICAgIHIgKj0gcwogICAgICAgICAgICAgICAgc2kuYXBwZW5kKHMpCiAgICAgICAgaWYgciA8PSBuIGFuZCByYW5kcmFuZ2UoMSwgbisxKSA8PSByOgogICAgICAgICAgICByZXR1cm4gciwgbGlzdChyZXZlcnNlZChzaSkpCgpwcmludChrYWxhaSgxMCoqMzApKQ==