def find_largest_pandigital_prime(numbers: list): """ We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime. What is the largest n-digit pandigital prime that exists? :param numbers: :param number: :return: """ start_time = time.time() permutations = list( int(''.join(t)) for t in itertools.permutations(str(t) for t in numbers)) big_pandigital_primes = set() for n in permutations: if is_pandigital(n) and is_prime(n): big_pandigital_primes.add(n) result = max(big_pandigital_primes) print_time_log(start_time, result) return result
def pandigital_prime(n): """ We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime. What is the largest n-digit pandigital prime that exists? """ max = 10**n sieve = utils.sieve_of_eratosthenes(max) primes = [x for x in range(0, max) if sieve[x]] pandigitals = [x for x in primes if utils.is_pandigital(x)] return pandigitals[-1]
def test_should_return_false(self): self.assertFalse(utils.is_pandigital(41234))
def test_should_return_true(self): self.assertTrue(utils.is_pandigital(41235))
def test_is_pandigital_large_false(self): self.assertFalse(is_pandigital(10523456978))
def test_is_pandigital_large_true(self): self.assertTrue(is_pandigital(1023456978))
def test_is_pandigital_false(self): self.assertFalse(is_pandigital(15224))
def test_is_pandigital_true(self): self.assertTrue(is_pandigital(15234))