示例#1
0
def problem49(nr_of_digits, dist):
    """Problem 49 - Prime permutations"""
    limit = 10 ** nr_of_digits

    fpc = pelib.FastPrimeChecker()

    # Lazy
    result = 0
    skip_set = set()
    for p in pelib.primes_sieve(limit):
        if p < 10 ** (nr_of_digits - 1) or p in skip_set:
            continue

        s = set([p])
        for pp_arr in itertools.permutations(str(p)):
            pp = int("".join(pp_arr))
            if len(str(pp)) == nr_of_digits and fpc.is_prime(pp):
                s.add(pp)

        skip_set.update(s)

        if len(s) > 2:
            # check
            for pe in s:
                if s.issuperset([pe, pe + dist, pe + (2 * dist)]) and pe != IGNORE_SEQ_START:
                    return int(str(pe) + str(pe + dist) + str(pe + (2 * dist)))
示例#2
0
def problem50(limit):
    """Problem 50 - Prime permutations"""

    fpc = pelib.FastPrimeChecker()

    # Lazy
    tsum = 0
    longest = 0
    highest_sum = 0
    primes = []
    for p in pelib.primes_sieve(limit):
        primes.append(p)
        tsum += p
        # print(p,sum)

        if tsum - sum(primes[0:len(primes) - longest]) > limit:
            break

        i = len(primes) - longest

        # Subtract from front
        for i in range(0, len(primes)):
            seqlen = len(primes) - i
            if seqlen <= longest:
                break

            psum = tsum - sum(primes[0:i])
    # 		print(tsum,sum(primes[0:i]),psum,seqlen)

            if fpc.is_prime(psum):
                longest = seqlen
                highest_sum = psum

    return highest_sum
示例#3
0
def problem58():
    """Problem 58 - Spiral primes"""

    fpc = pelib.FastPrimeChecker()

    result = 0
    nr_primes = 0
    nr_total = 0
    diagonal_square_spiral_gen = diagonal_square_spiral()
    while True:
        value = next(diagonal_square_spiral_gen)

        if fpc.is_prime(value):
            nr_primes += 1
        nr_total += 1

        if nr_total % 4 == 1:
            # print("Side Length: {} Fraction {}/{} = {}".format((nr_total +
            #                                                     1) // 2, nr_primes, nr_total, nr_primes / nr_total))
            # Full Square
            if (nr_primes / nr_total) < .1 and nr_total > 1:  # Exclude "1"-case

                # Side Length
                return (nr_total + 1) // 2

    return result
示例#4
0
 def test_FPC(self):
     fpc = pelib.FastPrimeChecker(1000000000)
     self.assertTrue(fpc.is_prime(31627))
     self.assertFalse(fpc.is_prime(31623))
示例#5
0
#!/usr/bin/env python3
"""Project Euler - Problem 37 Module"""

import pelib

LIMIT = 1000000
FPC = pelib.FastPrimeChecker(LIMIT)


def isTruncatablePrime(number):
    result = False
    str_number = str(number)
    # we already know that number is prime
    for i in range(1, len(str_number)):
        result = True
        l_trunc = int(str_number[i:])
        r_trunc = int(str_number[:i])
        if not (FPC.is_prime(l_trunc) and FPC.is_prime(r_trunc)):
            return False

    return result


def problem37():
    """Problem 37 - Truncatable primes"""

    result = 0
    nrTruncPrimes = 0

    for p in pelib.primes_sieve(LIMIT):
        if isTruncatablePrime(p):
示例#6
0
#!/usr/bin/env python3
"""Project Euler - Problem 35 Module"""

import pelib

FPC = pelib.FastPrimeChecker()

def is_circular_primes(number):
    str_number = str(number)
    # we already know that number is prime
    for i in range(1, len(str_number)):
        # shift
        shifted = int(str_number[i:] + str_number[:i])
        if not FPC.is_prime(shifted):
            return False

    return True

def problem35(limit):
    """Problem 35 - Circular primes"""

    result = 0
    for p in pelib.primes_sieve(limit):
        if is_circular_primes(p):
            result += 1

    return result


def run():
    """Default Run Method"""