(Sage)
concat = lambda x: Integer(''.join(str(i) for i in x), base=10)
def primelists(sofar, widths):
if not widths: yield sofar; return
w = widths[0]
for p in prime_range(10**(w-1), 10**w):
if p not in sofar:
for pv in primelists(sofar+[p], widths[1:]):
yield pv
for numdig in PositiveIntegers():
least = None
for part in Partitions(numdig, length=n):
if list(part).count(1) > 4: continue # optimization
for sizes in Permutations(part):
for plist in primelists([], sizes):
x = concat(plist)
if is_prime(x): least = min(x, least) if least else x
# since x is increasing in this inner loop,
# no need to continue if we can't improve
if least and x >= least: break
|