def main(): """ >>> main() 134043 """ primes = Primes(10 ** 6) min_consecutive_valid_numbers = 4 distinct_prime_factors = 4 # next number after lower bound has to have at least distinct_prime_factors # of odd primes as prime factors lower_bound = (3 * 5 * 7 * 11) - 1 number = 0 consecutive_valid_numbers_count = 0 for number in count(lower_bound): if consecutive_valid_numbers_count == min_consecutive_valid_numbers: break if len(set(primes.factors_of(number))) == distinct_prime_factors: consecutive_valid_numbers_count += 1 else: consecutive_valid_numbers_count = 0 # print first number of the consecutive numbers print(number - distinct_prime_factors)
def main(): """ >>> main() 6857 """ number = 600851475143 primes = Primes(10 ** 6) print(max(primes.factors_of(number)))
def test_primes_firsts(self): assert Primes.first(1) == [2] assert Primes.first(2) == [2, 3] assert Primes.first(5) == [2, 3, 5, 7, 11] assert Primes.first(20)[-5:] == [53, 59, 61, 67, 71] assert Primes.first(100)[99] == 541 assert Primes.first(20004)[79] == 409
def main(): """ >>> main() 26033 """ primes = Primes(10 ** 8) remarkable_primes = [] remarkable_primes_min_sum = sys.maxsize i = 0 while True: if i > PRIME_INDEX_LIMIT: last_added_prime = list_to_int(remarkable_primes.pop()) i = primes.index(last_added_prime) + 1 if len(remarkable_primes) == 0 and i == PRIME_INDEX_LIMIT: break new_prime = str(primes[i]) new_prime_is_remarkable = True for prime in remarkable_primes: if list_to_int(new_prime + prime) not in primes: new_prime_is_remarkable = False break if list_to_int(prime + new_prime) not in primes: new_prime_is_remarkable = False break if new_prime_is_remarkable: remarkable_primes.append(new_prime) if len(remarkable_primes) == LEN_PRIME_SET: primes_sum = sum((int(p) for p in remarkable_primes)) if primes_sum < remarkable_primes_min_sum: remarkable_primes_min_sum = primes_sum i += 1 print(remarkable_primes_min_sum)