Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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
Пример #4
0
"""
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]
Пример #5
0
def candidates():
    for p in gen_primes():
        digits = digitize(p)
        if len(digits) > len(set(digits)):
            yield digits
Пример #6
0
from utils import gen_primes

print(sum(gen_primes(2 * (10**6))))
Пример #7
0
"""
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
Пример #8
0
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))
Пример #9
0
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])
Пример #10
0
 def test_gen_primes_start(self):
     gp = gen_primes(6)
     self.assertEqual([7,11,13,17,19], [gp.next() for i in range(5)])
Пример #11
0
 def test_gen_primes(self):
     gp = gen_primes()
     self.assertEqual([2,3,5,7,11], [gp.next() for i in range(5)])
Пример #12
0
"""
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))
Пример #13
0
# 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]
Пример #14
0
"""
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