Exemple #1
0
def problem(limit):
    pr_gen = primes_gen()
    sum_primes = 0
    primes = []
    while sum_primes < limit:
        prime = next(pr_gen)
        sum_primes += prime
        primes.append(prime)

    length = len(primes)
    while True:
        num = sum(primes[:length])
        start = 0
        while num < limit:
            if miller_rabin_test(num):
                if length >= 3:
                    print('{} = {} + {} + ... + {}'.format(
                        num, primes[start], primes[start + 1],
                        primes[start + length - 1]))
                else:
                    print('{} = {}'.format(
                        num, ' + '.join(map(str,
                                            primes[start:start + length]))))

                print(
                    'The longest sum of consecutive primes below {} that adds to a prime, '
                    'contains {} terms, and is equal to {}.'.format(
                        limit, length, num))
                return num
            else:
                if (start + length) >= len(primes):
                    primes.append(next(pr_gen))
                num += primes[start + length] - primes[start]
                start += 1
        length -= 1
Exemple #2
0
def problem():
    max_num_primes, possible_a, possible_b = 0, 0, 0
    for b in range(2, 1001):
        if miller_rabin_test(b):
            endpoint = floor(b ** 0.5)
            for a in range(-2 * endpoint, 2 * endpoint + 1, 1):
                num_primes = 0
                for n in range(0, b):
                    if miller_rabin_test(quadratic(n, a, b)):
                        num_primes += 1
                    else:
                        break
                if num_primes > max_num_primes:
                    possible_a = a
                    possible_b = b
                    max_num_primes = num_primes
    return possible_a, possible_b, max_num_primes
Exemple #3
0
    def check(xs):

        probables = []

        for x in xs:
            for i in range(1, 10):
                new_x = int(str(i) + str(x))
                if miller_rabin_test(new_x):

                    probables.append(new_x)

                    pow_10 = 10
                    while pow_10 < new_x:
                        if miller_rabin_test(new_x // pow_10):
                            pow_10 *= 10
                        else:
                            break
                    else:
                        truncatable.append(new_x)
        if len(truncatable) < 11:
            check(probables)
Exemple #4
0
def problem():
    max_prime = 0
    flag = False
    # 1 + 2 + ... + 9 = 45, 45 % 3 => 9-digit pandigital is not prime.
    for pw in range(8, 0, -1):
        for permut in permutations(range(1, pw + 1)):
            num = 0
            for i in permut:
                num *= 10
                num += i
            if miller_rabin_test(num):
                max_prime = max(max_prime, num)
                flag = True
        if flag:
            break

    return max_prime
Exemple #5
0
def problem(lim):
    circular_primes = list(filter(lambda x: x < lim, [2, 3, 5]))
    for num in range(7, lim, 2):
        temp = num
        digits = []
        while temp > 0:
            digits.append(temp % 10)
            temp //= 10

        if not ({0, 2, 4, 6, 8, 5} & set(digits)):
            for _ in range(len(digits)):
                rotation = 0
                for i in digits:
                    rotation *= 10
                    rotation += i
                if miller_rabin_test(rotation):
                    digits = digits[1:] + digits[:1]
                else:
                    break
            else:
                circular_primes.append(num)
    return circular_primes