from common import pandigital, sieve primes = list(sieve(10**6).primes()) numbers = [x for x in pandigital(1, 9).numbers(10) if x > 10**8] numbers += [x for x in pandigital(1, 8).numbers(10) if x > 10**7] numbers += [x for x in pandigital(1, 7).numbers(10) if x > 10**6] numbers += [x for x in pandigital(1, 6).numbers(10) if x > 10**5] numbers += [x for x in pandigital(1, 5).numbers(10) if x > 10**4] numbers += [x for x in pandigital(1, 4).numbers(10) if x > 10**3] numbers += [x for x in pandigital(1, 3).numbers(10) if x > 10**2] numbers += [x for x in pandigital(1, 2).numbers(10) if x > 10**1] numbers.sort(reverse=True) # check for divisibility up to sqrt(n), as sieve requires too much memory def is_prime(n): for p in primes: if n % p == 0: return False return True for n in numbers: if is_prime(n): print n break