コード例 #1
0
ファイル: p35.py プロジェクト: lukeleslie/pe
def answer(limit):
    result = []
    primes = set(sieve_of_eratosthenes(limit))
    for p in primes:
        if is_circular_prime(p, primes):
            result.append(p)

    print len(result)
コード例 #2
0
ファイル: p37.py プロジェクト: lukeleslie/pe
def answer(limit):
	result = []
	primes = set(sieve_of_eratosthenes(limit))
	for p in primes:
		if is_truncatable_prime(p, primes):
			result.append(p)
	print result
	print sum(result) - 17
コード例 #3
0
ファイル: p49.py プロジェクト: lukeleslie/pe
def answer():
    primes = set([x for x in sieve_of_eratosthenes(10 ** 4) if x >= 1000 and x <= 9999])

    for p in primes:
        p_str = str(p)
        if "".join(sorted(str(p))) == "1478":
            continue
        seq = set()
        perms = itertools.permutations(p_str)
        for perm in perms:
            v = int("".join(perm))
            if v in primes:
                seq.add(v)
        if len(seq) >= 3:
            equi = equidistant_elements(list(seq))
            if equi:
                return "".join([str(x) for x in equi])
コード例 #4
0
ファイル: p46.py プロジェクト: lukeleslie/pe
def answer():
	primes = sieve_of_eratosthenes(10**6)
	prime_set = set(primes)
	n = 1
	while True:
		# these are only the odd numbers, but we take care of primes
		# using the sqrt check below
		n += 2
		found = False
		for i in xrange(len(primes)):
			p = primes[i]
			if p > n: 
				break
			diff = math.sqrt((n - p) / 2.0)
			if int(diff) == diff:
				found = True
		if not found:
			return n
コード例 #5
0
ファイル: p50.py プロジェクト: lukeleslie/pe
def answer():
	primes = sieve_of_eratosthenes(10**6)
	prime_set = set(primes)
	max_consecutive = 0
	max_number = 0
	for i in xrange(len(primes)-1):
		val = primes[i]
		counter = 1
		for j in xrange(i+1, len(primes)):
			val += primes[j]
			if val > 10**6:
				break
			counter += 1
			if val in prime_set:
				if max_consecutive < counter:
					max_consecutive = counter
					max_number = val
	return max_number, max_consecutive
コード例 #6
0
ファイル: p27.py プロジェクト: lukeleslie/pe
def answer():
	# Primes could be given in any other way; here, we just use a simple sieve.
	primes = set(sieve_of_eratosthenes(10**7))
	max_num_primes = 0
	product = 0
	for a in xrange(-1000, 1000):
		for b in xrange(-1000, 1000):
			num_primes = 0
			n = 0
			while True:
				if int(abs(n**2 + a*n + b)) in primes:
					num_primes += 1
					n += 1
				else:
					break
			if num_primes > max_num_primes:
				max_num_primes = num_primes
				product = a*b
	return product
コード例 #7
0
ファイル: p47.py プロジェクト: lukeleslie/pe
def answer():
	primes = sieve_of_eratosthenes(10**6)
	factors1 = 0
	factors2 = 0
	factors3 = 0
	n = 1
	while True:
		factors = 0
		for p in primes:
			if p > n:
				break
			if n % p == 0:
				factors += 1
		if factors1 >= 4 and factors2 >= 4 and factors3 >= 4 and factors >= 4:
			return n-3
		factors1 = factors2
		factors2 = factors3
		factors3 = factors
		n += 1
コード例 #8
0
ファイル: p60.py プロジェクト: lukeleslie/pe
import sys
from helpers import sieve_of_eratosthenes, memoize, is_prime

concat_primes = dict()
limit = 20000
primes = sieve_of_eratosthenes(limit)

def concat(a, b):
	return int(str(a) + str(b))

#Memoized to avoid duplicate computation
# Returns the set of prime indices which, when concatenated primes[i],
# will yield another prime
@memoize
def get_concat_primes(i):
	prime = primes[i]
	prime_concats = set()
	for j in xrange(i+1, len(primes)):
		prime_j = primes[j]
		c1 = concat(prime, prime_j)
		c2 = concat(prime_j, prime)
		c1_prime = c1 in primes if c1 < limit else is_prime(c1)
		c2_prime = c2 in primes if c2 < limit else is_prime(c2)
		if c1_prime and c2_prime:
			prime_concats.add(j)
	return prime_concats
		
def answer():
	min_sum = sys.maxint
	for i in xrange(len(primes)):
		prime_i = primes[i]
コード例 #9
0
ファイル: p51.py プロジェクト: lukeleslie/pe
from helpers import sieve_of_eratosthenes, memoize
import itertools
import sys

primes = sieve_of_eratosthenes(10**6)
prime_set = set(primes)


@memoize
def check_val(p_str):
	num_primes = 0
	smallest_prime = sys.maxint
	start = 1 if p_str[0] == '*' else 0
	r = range(start, 10) if p_str[-1] != '*' else [1, 3, 7, 9]
	for i in r:
		p = int(p_str.replace('*', str(i)))
		if p in primes:
			num_primes += 1
			smallest_prime = min(smallest_prime, p)
	if num_primes >= 8:
		print "FOUND ", smallest_prime
		sys.exit(0)
	

def generate_wildcards(p):
	s = str(p)
	r = range(len(s))
	for i in xrange(1, len(s)):
		for c in itertools.combinations(r, i):
			l = list(s)
			for i in c: