From db2ac78ab8cc36daf2f5ba6c6e76ad7234efc900 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Sun, 16 Aug 2026 09:53:53 -0400 Subject: [PATCH] Solve problem 274 --- python/e274.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 python/e274.py diff --git a/python/e274.py b/python/e274.py new file mode 100644 index 0000000..bc1b81b --- /dev/null +++ b/python/e274.py @@ -0,0 +1,57 @@ +from math import gcd +from lib_prime import primes +from lib_misc import modinv + + +def find_m(p: int) -> int: + rs = [] + test_n = p * 1337 + for m in range(1, p): + test_f = f(test_n, m) + if test_f % p == 0: + rs.append(m) + assert len(rs) == 1 + return rs[0] + + +def calc_m(p: int) -> int: + """ + (n // 10 + (n % 10) * m) % p == 0 + a + b * m == 0 (mod p) + b * m == -a (mod p) + m == -a * b**-1 (mod p) + """ + n = p * 1337 + a = n // 10 + b = (n % 10) + m = -a * modinv(b, p) + m %= p + return m + + +def f(n: int, m: int = 34) -> int: + left = n // 10 + right = n % 10 * m + r = left + right + return r + + +def euler_274(): + ps = primes(10**7) + sum_m = 0 + for p in ps: + if gcd(p, 10) != 1: + continue + m = calc_m(p) + if p < 1000: + m_naiv = find_m(p) + assert m == m_naiv + sum_m += m + return sum_m + + +if __name__ == "__main__": + solution = euler_274() + print(f"e274.py: {solution}") + assert solution == 1601912348822 +