# project euler 46 from primes import primesieve MAX_RANGE = 10000 prime = primesieve(MAX_RANGE) doublesquares = [2 * s**2 for s in range(50)] goldbach = set(i + j for i in prime for j in doublesquares) print min([i for i in range(9, MAX_RANGE, 2) if i not in goldbach])
# project euler 51 alternate 2 from primes import primesieve primes = [str(n) for n in primesieve(10**6)] isprime = [False] * 10**6 for p in primes: isprime[int(p)] = True for p in primes: for digit in sorted(set(p)): result = (p.replace(digit, n) for n in '0123456789') result = [n for n in result if n[0] != '0' and isprime[int(n)]] if len(result) > 7: print list(enumerate(result)) exit()
Consider the divisors of 30: 1,2,3,5,6,10,15,30. It can be seen that for every divisor d of 30, d+30/d is prime. Find the sum of all positive integers n not exceeding 100 000 000 such that for every divisor d of n, d+n/d is prime. """ import time from primes import primesieve print("Problem 357") start = time.time() # because we miss the first n (1 + 1 / 1 == prime) total = 1 # Generate list of primes p = primesieve(100000000) def prime(n): # n will be even so the range for divisors is n /2 # n / 2 can't be even. The biggest prime therefore # will be sqrt(n) for d in range(1, int(n**0.5) + 1): # is d a divisor? if n % d == 0: # if so does it qualify? # we are dealing with ints and // is quicker than / if (d + n // d) not in p: return (False) return (True)
# project euler 50 alternate from primes import primesieve, isprimelist primes = primesieve(10**6) check = [False] * 10**6 for p in primes: check[p] = True sums = [0] * len(primes) sums[0] = primes[0] for i in range(1, len(primes)): sums[i] = sums[i-1] + primes[i] seqMax = 0 for i in range(len(primes)): for j in range(i+1, 600): s = sums[j] - sums[i] seq = j - i if s < 1000000 and check[s] and seq > seqMax: seqMax = seq print s, seq
# project euler 49 from itertools import permutations from primes import primesieve prime = set(primesieve(16660)) for i in range(1001, 10000, 2): if i in prime: n = list(sorted(set([int(''.join(p)) for p in permutations(str(i))]) & set([i+3330, i+2*3330]))) if len(n) == 2 and n[0] in prime and n[1] in prime: print i, n[0], n[1]