Example #1
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
Example #2
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)))
Example #3
0
def problem51(nr_prime_family):
    """Problem 51 - Prime digit replacements"""

    for p in pelib.primes_sieve(LIMIT):
        bool_res, mask, matching_vals = check_digit_replacment(p, nr_prime_family)
        if bool_res:
            # Return first value of family
            return replace_numbers_on_mask(list(str(p)), mask, str(matching_vals[0]))
Example #4
0
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
Example #5
0
def check_goldbach(n):
    if pelib.is_prime(n):
        return True

    for p in pelib.primes_sieve(n):
        np2 = (n - p) / 2
        np2_root = math.sqrt(np2)
        if np2_root == int(np2_root):
            return True

    return False
Example #6
0
def check_property(n_str):
    p_gen = pelib.primes_sieve(20)

    property_holds = True
    for i in range(1, len(n_str) - 3 + 1):
        p = next(p_gen)
        n = int(n_str[i:i + 3])
        if n % p != 0:
            property_holds = False
            break

    return property_holds
Example #7
0
def problem37():
    """Problem 37 - Truncatable primes"""

    result = 0
    nrTruncPrimes = 0

    for p in pelib.primes_sieve(LIMIT):
        if isTruncatablePrime(p):
            nrTruncPrimes += 1
            result += p

    return result