# 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()
Пример #3
0
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]