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)
Example #2
0
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
Example #3
0
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
Example #4
0
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)
Example #7
0
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
Example #8
0
# %% 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
Example #10
0
# %% 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]