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
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
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)
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
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