def problem35(): """ Circular primes How many circular primes are there below one million? """ return_value = 0 for prime in mathhelper.prime_list(999999): prime_digits = list(str(prime)) rotate_list = collections.deque(prime_digits) rotate_list_length = len(rotate_list) if rotate_list_length == 1: return_value += 1 continue if len({"0", "2", "4", "5", "6", "8"}.intersection(prime_digits)) > 0: continue for rotate in range(1, rotate_list_length): rotate_list.rotate(1) if not mathhelper.is_prime(mathhelper.create_number(rotate_list)): break if rotate + 1 == rotate_list_length: return_value += 1 return return_value
def problem41(): """ Pandigital prime What is the largest n-digit pandigital prime that exists? """ for prime in mathhelper.prime_list(7654321, reverse=True): if mathhelper.is_pandigital(prime): return prime
def problem50(): """ Consecutive prime sum Which prime, below one-million, can be written as the sum of the most consecutive primes? """ max_index = 0 biggest_prime = 0 for start in mathhelper.prime_list(1000000, reverse=True): sum_primes = 0 for index, prime in enumerate(mathhelper.prime_list(start, reverse=True)): if sum_primes > 1000000: break sum_primes += prime if max_index < index and mathhelper.is_prime(sum_primes): max_index = index biggest_prime = sum_primes return biggest_prime
def problem37(): """ Truncatable primes Find the sum of the only eleven primes that are both truncatable from left to right and right to left. """ found_item = 0 return_value = 0 for prime in mathhelper.prime_list(None): if prime < 10: continue prime_text = str(prime) for truncate in range(1, len(prime_text)): left_part = int(prime_text[:(-1 * truncate)]) right_part = int(prime_text[truncate:]) if not mathhelper.is_prime(left_part) or not mathhelper.is_prime(right_part): break if truncate + 1 == len(prime_text): return_value += prime found_item += 1 if found_item == 11: return return_value
def test_prime_list(self): self.assertEqual(list(mathhelper.prime_list(-5)), []) self.assertEqual(list(mathhelper.prime_list(-1)), []) self.assertEqual(list(mathhelper.prime_list(0)), []) self.assertEqual(list(mathhelper.prime_list(1)), []) self.assertEqual(list(mathhelper.prime_list(2)), [2]) self.assertEqual(list(mathhelper.prime_list(3)), [2, 3]) self.assertEqual(list(mathhelper.prime_list(10)), [2, 3, 5, 7]) self.assertEqual(list(mathhelper.prime_list(17)), [2, 3, 5, 7, 11, 13, 17]) self.assertEqual(list(mathhelper.prime_list(18)), [2, 3, 5, 7, 11, 13, 17]) self.assertEqual(list(mathhelper.prime_list(19)), [2, 3, 5, 7, 11, 13, 17, 19]) self.assertEqual(list(mathhelper.prime_list(20)), [2, 3, 5, 7, 11, 13, 17, 19]) self.assertEqual(list(mathhelper.prime_list(21)), [2, 3, 5, 7, 11, 13, 17, 19]) self.assertEqual(list(mathhelper.prime_list(22)), [2, 3, 5, 7, 11, 13, 17, 19]) self.assertEqual(list(mathhelper.prime_list(23)), [2, 3, 5, 7, 11, 13, 17, 19, 23]) self.assertEqual(list(mathhelper.prime_list(24)), [2, 3, 5, 7, 11, 13, 17, 19, 23]) self.assertEqual(list(mathhelper.prime_list(-5, True)), []) self.assertEqual(list(mathhelper.prime_list(-1, True)), []) self.assertEqual(list(mathhelper.prime_list(0, True)), []) self.assertEqual(list(mathhelper.prime_list(1, True)), []) self.assertEqual(list(mathhelper.prime_list(2, True)), [2]) self.assertEqual(list(mathhelper.prime_list(3, True)), [3, 2]) self.assertEqual(list(mathhelper.prime_list(10, True)), [7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(17, True)), [17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(18, True)), [17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(19, True)), [19, 17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(20, True)), [19, 17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(21, True)), [19, 17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(22, True)), [19, 17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(23, True)), [23, 19, 17, 13, 11, 7, 5, 3, 2]) self.assertEqual(list(mathhelper.prime_list(24, True)), [23, 19, 17, 13, 11, 7, 5, 3, 2])