34 lines
887 B
Python
34 lines
887 B
Python
|
|
from tools import number_theory
|
|
|
|
def is_prime(num, prime):
|
|
for p in prime:
|
|
if p ** 2 > num:
|
|
return True
|
|
if not (num % p):
|
|
return False
|
|
|
|
def gen_p(digit):
|
|
l = list(reversed(range(1, digit + 1)))
|
|
not_ordered = True
|
|
while not_ordered:
|
|
yield int(''.join(map(lambda x: str(x), l)))
|
|
for i in range(len(l) - 1, 0, -1):
|
|
if l[i - 1] > l[i]:
|
|
post = list(sorted(l[i - 1:]))
|
|
get = post.pop(post.index(l[i - 1]) - 1)
|
|
l = l[:i - 1] + [get] + list(reversed(post))
|
|
break
|
|
else:
|
|
not_ordered = False
|
|
|
|
def find():
|
|
prime = list(number_theory.make_prime(10000))
|
|
for digit in range(8, 3, -1):
|
|
if digit % 3:
|
|
for x in gen_p(digit):
|
|
if is_prime(x, prime):
|
|
return x
|
|
|
|
print(find())
|