maxConsecutivePrimes = 40 result = 1 * 41 # b is prime > 2 primes = listOfPrimes(1000)[1:] # a must be odd for a in range (-999, 1000, 2): # bisect_left locate the insertion point to maintain sorted order # we will use it to find the index of a first element >= 2 - a in prime list to make sure that b >= 2 - a for b in primes[bisect_left(primes, 2 - a):]: # f(0) = b, b is guaranteed to be prime # let's start from n = 1 n = 1 consecutivePrimes = 1 while True: if isPrime (n * n + a * n + b): consecutivePrimes += 1 else: break n += 1 if maxConsecutivePrimes < consecutivePrimes: maxConsecutivePrimes = consecutivePrimes result = a * b print ("Result:", result)
#!/usr/bin/env python3 # Pandigital prime # Problem 41 # # 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? # Solution: # For every 5-, 6-, 8- and 9-digit pandigital number the sum of digits is divisible by 3, so the number itself is divisible by 3, see: # http://en.wikipedia.org/wiki/Divisibility_rule#Divisibility_by_3_or_9 # So it is enough to check 7- and 4-digit pandigital numbers (2143 is a 4-digit prime pandigital number). from itertools import permutations from myUtils import isPrime import sys for n in [7, 4]: # generate list of digits in a descending order, to make sure permutations start from the biggest number digits = "".join([str(i) for i in range (n, 0, -1)]) for number in [int(''.join(p)) for p in permutations(digits)]: if isPrime(number): print ("Result:", number) sys.exit()