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