from lib_prime import primes def r_modulo_closed_form(n, m): assert n > 0 and m > 0 return ((pow(10, n, 9 * m) - 1) // 9) % m def is_factor(n, m): return pow(10, n, 9 * m) == 1 def repunit_factor_sum(n): ps = [] for p in primes(10**6): assert is_factor(n, p) == (r_modulo_closed_form(n, p) == 0) if r_modulo_closed_form(n, p) == 0: ps.append(p) if len(ps) == 40: break return sum(ps) def euler_132(): assert repunit_factor_sum(10) == 9414 return repunit_factor_sum(10**9) if __name__ == "__main__": solution = euler_132() print("e132.py: " + str(solution)) assert solution == 843296