from lib_prime import prime_factors_count from collections import defaultdict def sum_factors(n: int, k: int) -> int: factors_num = defaultdict(int) for i in range(n - k + 1, n + 1): for factor, count in prime_factors_count(i).items(): factors_num[factor] += count for i in range(2, k + 1): for factor, count in prime_factors_count(i).items(): factors_num[factor] -= count return sum(factor * count for factor, count in factors_num.items()) def euler_231(): assert sum_factors(10, 3) == 14 return sum_factors(20 * 10**6, 15 * 10**6) if __name__ == "__main__": solution = euler_231() print(f"e231.py: {solution}") # assert(solution == 0)