def gcd(a, b): if a < b: r = b % a return gcd(a, r) elif b == a: return b elif b == 0: return a else: r = a % b return gcd(b, r)
def f(n): n2 = int(n**0.5) s = g(n, 1, 1) for i in range(1, n2+1): for j in range(i, n2+1): if gcd(i, j) != 1: continue s += g(n, i**2+j**2, (i+j))*(2 if i != j else 1) return s
def a_b_n(k, D): h1, k1 = 1, 0 a_i = int(D**0.5) r = 1, 1, -a_i, 1 h2, k2 = a_i, 1 for i in range(k): a, b, c, d = r a, b, c, d = (a * b * d**2, a**2 * d**2 * D - c**2 * b**2, -c * b**2 * d, a**2 * d**2 * D - c**2 * b**2) d1 = gcd(abs(a), abs(b)) a //= d1 b //= d1 a_i = int(a * (D**0.5) / b + c / d) c -= a_i * d d2 = gcd(abs(c), abs(d)) c //= d2 d //= d2 r = a, b, c, d h1, h2 = h2, a_i * h2 + h1 k1, k2 = k2, a_i * k2 + k1 return h2, k2
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 a_b(D): h1, k1 = 1, 0 a_i = int(D ** 0.5) r = 1, 1, -a_i, 1 h2, k2 = a_i, 1 while h2 ** 2 - D * k2 ** 2 != 1: a, b, c, d = r a2, b2 = a * b * d ** 2, a ** 2 * d ** 2 * D - c ** 2 * b ** 2 c2, d2 = -c * b ** 2 * d, a ** 2 * d ** 2 * D - c ** 2 * b ** 2 a, b, c, d = a2, b2, c2, d2 d1 = gcd(abs(a), abs(b)) a //= d1 b //= d1 a_i = int(a * (D ** 0.5) / b + c / d) c -= a_i * d d2 = gcd(abs(c), abs(d)) c //= d2 d //= d2 r = a, b, c, d h1, h2 = h2, a_i * h2 + h1 k1, k2 = k2, a_i * k2 + k1 return h2, k2
def period(D): h1, k1 = 1, 0 a_i = int(D ** 0.5) r = 1, 1, -a_i, 1 h2, k2 = a_i, 1 L = [] while r not in L: L.append(r) a, b, c, d = r a2, b2 = a * b * d ** 2, a ** 2 * d ** 2 * D - c ** 2 * b ** 2 c2, d2 = -c * b ** 2 * d, a ** 2 * d ** 2 * D - c ** 2 * b ** 2 a, b, c, d = a2, b2, c2, d2 d1 = gcd(abs(a), abs(b)) a //= d1 b //= d1 a_i = int(a * (D ** 0.5) / b + c / d) c -= a_i * d d2 = gcd(abs(c), abs(d)) c //= d2 d //= d2 r = a, b, c, d h1, h2 = h2, a_i * h2 + h1 k1, k2 = k2, a_i * k2 + k1 return len(L) - L.index(r)
def problem_33(): L = [] for b in range(1, 9): for c in range(b + 1, 10): q, r = divmod(9 * b * c, 10 * b - c) # second case if r == 0 and c < q < 10: L.append((b, c)) q, r = divmod(9 * b * c, 10 * c - b) # first one if r == 0 and 0 < q < b: L.append((b, c)) num = 1 denominator = 1 for n, d in L: num *= n denominator *= d delta = gcd(num, denominator) print(denominator // delta) # sol = 100
# %% Problem 168 from Tools import gcd s = 0 for d in range(2, 10): for a in range(d, 10): q = 10*d-1 qq = q // gcd(q, a) ll = [] prod = 10 for n in range(2, 101): if prod == d: ll.append(n) prod *= 10 prod %= qq for n in ll: b = ((10**(n-1)-d)//qq)*(a//gcd(q, a)) nb = int(str(b)+str(a)) s += int(nb)%10**5 s %= 10**5 s += 45*(11+111+1111+11111*96) s %= 10**5 print(s) # 59206
def d(n): k = k_max(n) if terminating(k / gcd(k, n)): return -n return n
# %% Problem 329 from Tools import numpy_sieve, gcd lp = numpy_sieve(500) ok = "PPPPNNPPPNPPNPN" L = [1] * 501 for k in range(15): L2 = [0] * 501 L2[2] += L[1] * (2 if ok[k] == 'P' else 4) for p in range(2, 500): if p in lp: pp, pn = 2, 1 else: pp, pn = 1, 2 a = L[p] * (pp if ok[k] == 'P' else pn) L2[p - 1] += a L2[p + 1] += a L2[499] += L[500] * (2 if ok[k] == 'P' else 4) L = L2 s = 0 for a in L: s += a d = gcd(s, 500 * 6**15) print(str(s // d) + "/" + str( (500 * 6**15) // d)) # sol = 199740353/29386561536000
if a < b: r = b % a return gcd(a, r) elif b == a: return b elif b == 0: return a else: r = a % b return gcd(b, r) nb = 3 for d in range(9, 12001): for n in range(d // 3 + 1, d // 2 + 1): if gcd(d, n) == 1: nb += 1 print(nb) # %% Problem 74 l_fact = [1] for i in range(1, 10): l_fact.append(l_fact[-1] * i) # print(l_fact) def next_one(n): s = 0 while n > 0: s += l_fact[n % 10]