def get_prime_factors(number): # root = math.floor(math.sqrt(number)) primes_up_to_number = gen_primes(number) prime_factors = [] for prime in primes_up_to_number: if number % prime == 0: prime_factors.append(prime) return sorted(prime_factors)
def sum_of_primes(): N = 2000000 t = 2 sum = 0 g = gen_primes() while t < N: t = g.next() sum += t if t < 100 or t > 1900000: print t, sum return sum
def solution(): sets = [] for prime in gen_primes(): if prime == 2: continue for s in sets: ispp = all(prime_pair(element, prime) for element in s) if ispp: sets.append(s|{prime}) if len(s) + 1 >= 4: print s | {prime} if len(s) + 1 == 5: return sum(s) + prime sets.append({prime}) return None
""" Project Euler Problem 7 ======================= By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10001st prime number? """ from utils import gen_primes # Listing primes less than 200,000 yields more than enough. print gen_primes(200000)[10000]
def candidates(): for p in gen_primes(): digits = digitize(p) if len(digits) > len(set(digits)): yield digits
from utils import gen_primes print(sum(gen_primes(2 * (10**6))))
""" By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10 001st prime number? """ from utils import gen_primes LIMIT = 10001 prime_gen = gen_primes() c = 0 while c != LIMIT: prime = prime_gen.next() c += 1 print prime
The number 3797 has an interesting property. Being prime itself, it is possible to continuously remove digits from left to right, and remain prime at each stage: 3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3. Find the sum of the only eleven primes that are both truncatable from left to right and right to left. NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes. """ from utils import gen_primes from collections import defaultdict primes = gen_primes(1000000) even = set(str(24680)) primes_by_length = defaultdict(list) trunc_by_length = defaultdict(list) for p in primes: primes_by_length[len(str(p))].append(p) # truncatable prime can never contain 1,4,6,8,9 if str(p)[0] in (1,4,6,8,9): continue if len(str(p))==1: trunc_by_length[1].append(p) else: len_p = len(str(p))
from utils import gen_primes prime_list = [] limit = 10000 while len(prime_list) < 10001: prime_list = gen_primes(limit) limit *= 10 print(prime_list[10000])
def test_gen_primes_start(self): gp = gen_primes(6) self.assertEqual([7,11,13,17,19], [gp.next() for i in range(5)])
def test_gen_primes(self): gp = gen_primes() self.assertEqual([2,3,5,7,11], [gp.next() for i in range(5)])
""" Project Euler Problem 10 ======================== The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million. """ from utils import gen_primes N = 2000000 print sum(gen_primes(N-1))
# Problem 3: # The prime factors of 13195 are 5, 7, 13 and 29. # What is the largest prime factor of the number 600851475143? import utils number = 600851475143 counter = 600851475143 primes = [] for x in utils.gen_primes(): # Break out of the loop if the square of the number # if larger than the original value being checked against. if (x * x) > counter: break elif number % x == 0: primes.append(x) number = number / x # Return the largest prime factor that was found. print primes[-1]
""" Project Euler Problem 3 ======================= The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143? """ from math import sqrt from utils import gen_primes N = 600851475143 max_prime = N candidates = gen_primes(sqrt(N)) candidates.reverse() for p in candidates: if N%p==0: max_prime = p break print max_prime