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 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 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
def test_FPC(self): fpc = pelib.FastPrimeChecker(1000000000) self.assertTrue(fpc.is_prime(31627)) self.assertFalse(fpc.is_prime(31623))
#!/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):
#!/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"""