Files
euler/python/e274.py
T
2026-08-16 09:53:53 -04:00

58 lines
1.0 KiB
Python

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