def is_right_truncatable(l): is_truncatable = 1 for size in xrange(0, len(l)): n = num(l[size:]) prime._refresh(int(math.sqrt(n))) if not prime._isprime(n): is_truncatable = 0 break return is_truncatable
def is_left_truncatable(l): is_truncatable = 1 for size in xrange(1, len(l)+1): n = num(l[:size]) prime._refresh(int(math.sqrt(n))) if not prime._isprime(n): is_truncatable = 0 break return is_truncatable
''' 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? ''' import prime from combinatorics import permutations # Pan-digital primes are 4 or 7 digits. Others divisible by 3 prime._refresh(2766) # sqrt(7654321) for perm in permutations(range(7, 0, -1)): num = 0 for n in perm: num = num * 10 + n if prime._isprime(num): print num break
import prime print prime.prime(11) print prime._isprime(32) print prime.isprime(11)
''' Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side length 7 is formed. 37 36 35 34 33 32 31 38 17 16 15 14 13 30 39 18 5 4 3 12 29 40 19 6 1 2 11 28 41 20 7 8 9 10 27 42 21 22 23 24 25 26 43 44 45 46 47 48 49 It is interesting to note that the odd squares lie along the bottom right diagonal, but what is more interesting is that 8 out of the 13 numbers lying along both diagonals are prime; that is, a ratio of 8/13 ~ 62%. If one complete new layer is wrapped around the spiral above, a square spiral with side length 9 will be formed. If this process is continued, what is the side length of the square spiral for which the ratio of primes along both diagonals first falls below 10%? ''' import prime prime._refresh(50000) width, diagonal, base, primes = 1, 1, 1, 0 while True: width = width + 2 increment = width - 1 for i in xrange(0, 4): diagonal = diagonal + increment if i < 3 and prime._isprime(diagonal): primes += 1 base = base + 4 if primes * 10 < base: print width break
def concatenations_are_prime(primes): for pair in combinations(primes, 2): if not prime._isprime(cat(pair[0], pair[1])): return False return True