def inv(n, p): if n == 1: return 1 a = bezout(n, p)[1] while a < 0: a += p return a
def fx(n, m): d1 = gcd(n, m) n0 = n phin0 = phi2(n) c = phi2(m) - phin0 if c % d1 != 0: return 0 c //= d1 m //= d1 n //= d1 v, u = bezout(n, m) k = (u*c) % m return n0*k+phin0
def inv(u, p): return bezout(u, p)[1]
from Tools import decompose_tout, bezout, numpy_sieve l7 = numpy_sieve(10**7) a = 1 mod = 1000000087 ss = 0 d = {} for n in range(2, 10**7 + 1): lp = decompose_tout(n, l7) for p, i in lp: if p in d: a *= bezout(mod, 1 + 2 * d[p])[0] d[p] += i a *= 1 + 2 * d[p] else: d[p] = i a *= 1 + 2 * d[p] a %= mod ss += a ss %= mod print(ss) # sol = 416146418
# %% Problem 506 from Tools import bezout L = [(123432, 0, 0), (123432, 1, 1), (23432, 12, 2), (3432, 123, 3), (432, 1234, 4), (32123432, 0, 0), (123432, 123, 3), (432, 12343, 5), (2123432, 123, 3), (432123432, 0, 0), (123432, 1234, 4), (32123432, 123, 3), (432123432, 12, 2), (3432123432, 1, 1), (23432123432, 0, 0)] L_q0_r = [0, 1, 2, 3, 4, 32, 123, 43, 2123, 432, 1234, 32123, 43212, 34321, 23432] NN = 1000 N, R = int.__divmod__(NN, 15) mod = 123454321 u, v = bezout(9, mod) # 1 = 9*v+u*mod while v < 0: v += mod inv_9 = v u2, v = bezout(999999, mod) # 1 = 9*v+u*mod while v < 0: v += mod inv_9_6 = v def v(n): q, r = int.__divmod__(n, 15) a, b, lb = L[r] s = b+123432*inv_9_6*(pow(10**6, q-1, mod)-1)*10**lb + pow(10, 6*q-6+lb, mod)*a return s % mod
def inv(a, p): return bezout(a, p)[1] % p