def p27(): global sieve testSieve = get_sieve_erosthane(15000) testSieve.sort() sieve = set(testSieve) primes = get_sieve_erosthane(1000) primes.sort() max, a, b = 0, 0, 0 for j in primes: # A must be prime too for i in primes: # i + j > 0 if not i + j > 0 : pass # 1 + i + j is also a prime if not 1+i+j in sieve : pass n = check(i, j) if n > max : max, a, b = n, i, j n = check(-i, j) if n > max : max, a, b = n, -i, j # skipping -j as -ve numbers are not considered primes return (max, a, b)
def p49(): s = get_sieve_erosthane(9999, sort = True) sieve = [n for n in s if n >= 1000] sieveSet = set(sieve) answers = set() for n in sieve: perm = permutations(str(n)) num = set([list_to_int(i) for i in perm if list_to_int(i) in sieveSet]) if len(num) < 3 : continue num = list(num) num.sort() l = len(num) for i in range(0, l): for j in range(i+1, l): diff = num[j] - num[i] if num[i] + diff not in num or num[i] + 2 * diff not in num : continue answers.add((num[i], num[i]+diff, num[i]+diff+diff)) return answers
def p41(): numbers = ['0', '1', '21', '321', '4321', '54321', '654321', '7654321'] # sqrt(999999999) = 31622 sieve = get_sieve_erosthane(32000, sort = True) for i in range(7, 1, -1): perm = permutations(numbers[i]) for p in perm: num = list_to_int(p) if pTest_sieve(num, sieve) : return num
def p46(): n = 10000 sieve = get_sieve_erosthane(n, method='set') for i in range(3, n, 2): # Since only composite numbers if i in sieve : continue # Count down from the number to 2 (smallest prime) success = False for j in range(1, i): # 2 x (j ^ 2) diff = i - (2 * j * j) if diff in sieve: #print i, diff, j success = True break if not success : return i
def p37(): limit = 740000 sieve = get_sieve_erosthane(limit) sieve.sort() sieve_set = set(sieve) answer = [] for n in sieve[4:]: ns = str(n) # Any number with a 0, 2, 5 cannot be a truncatable prime if '0' in ns or '2' in ns or '5' in ns : continue flag = True for i in range(1, len(ns)): if int(ns[i:]) not in sieve_set or int(ns[:i]) not in sieve_set : flag = False break if flag : answer.append(n) print answer return sum(answer)
def p35(): sieve = get_sieve_erosthane(1000000, 'set') # Starting with the obvious ones circularPrimes = [2, 3, 5, 7] for i in list(sieve)[4:]: flag = True si = str(i) if '2' in si or '5' in si or '0' in si: flag = False else: for j in rotate(si): # Converts a list of digits to a single integer n = reduce(lambda rst, d: int(rst) * 10 + int(d), j) if n not in sieve : flag = False break if flag : circularPrimes.append(i) #print i return len(circularPrimes)