From e2e83ec3fe5c084154bde81945f77a0ff2912fc2 Mon Sep 17 00:00:00 2001 From: Correl Roush Date: Wed, 5 May 2010 14:37:51 +0000 Subject: [PATCH] Problem 041 git-svn-id: file:///srv/svn/euler@74 e5f4c3ec-3c0c-11df-b522-21efaa4426b5 --- e041.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 e041.py diff --git a/e041.py b/e041.py new file mode 100644 index 0000000..e8fc561 --- /dev/null +++ b/e041.py @@ -0,0 +1,31 @@ +"""What is the largest n-digit pandigital prime that exists? + +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? +""" + +from e007 import is_prime +from e035 import permutations + +def pandigital_prime_generator(n): + if n not in [3, 7]: + raise Exception('Invalid pandigital prime length') + for end in [3, 7, 9]: + digits = range(1, n + 1) + if end not in digits: + continue + digits.remove(end) + for start in sorted(permutations(digits, len(digits)), reverse=True): + number = int(''.join([str(i) for i in start] + [str(end)])) + if is_prime(number): + yield number + +def main(): + for len in [9, 7, 3]: + for n in sorted(pandigital_prime_generator(len), reverse=True): + print 'Pandigital Prime:', n + return + +if __name__ == '__main__': + main()