diff --git a/e035.py b/e035.py new file mode 100644 index 0000000..76bdde5 --- /dev/null +++ b/e035.py @@ -0,0 +1,42 @@ +from e007 import primes + +class NotCircular(Exception): + pass + +def permutations(items, n): + if n == 0: + yield [] + else: + for i in xrange(len(items)): + for cc in permutations(items[:i] + items[i + 1:], n - 1): + yield [items[i]] + cc + +def cyclic_rotation(n): + if n < 10: + yield n + else: + s = str(n) + for i in xrange(len(s)): + yield int(s[i:] + s[:i]) + +if __name__ == '__main__': + MAX = 1000000 + circular_primes = [] + print 'Generating primes for p < {0}...'.format(MAX) + prime_list = primes(0, MAX) + print 'Searching for circular primes...' + for prime in prime_list: + try: + # Ensure the prime *can* be circular + if prime > 9: + for c in [n for n in str(prime) if n not in ['1', '3', '7', '9']]: + raise NotCircular() + # Check all permutations + for rotation in cyclic_rotation(prime): + if rotation not in prime_list: + raise NotCircular() + circular_primes.append(prime) + except NotCircular: + pass + # Clear all permutations from the list? + print 'Circular Primes ({0}): {1}'.format(len(circular_primes), circular_primes)