kotapiku
8/13/2017 - 3:06 PM

euclid_alg.py

import math
#intver
def intver():
    f,g = map(int,input().split())

    if f<g:
        h,s = g,f
    else:
        h,s = f,g
    a,b,c,d = 1,0,0,1

    while s != 0:
        q = int(h/s)
        r = h-q*s
        r0 = a-q*c
        r1 = b-q*d
        h,s = s,r
        a,c = c,r0
        b,d = d,r1

    print("gcd({},{}))={}".format(f,g,h))
    print("{}*{}+{}*{}={}".format(a,f,b,g,h))

#k[x]ver
# ex) x**2+2x x**3 -> [1,2,0],[1,0,0,0]
def kxver():

    f,g = input().split()
    f = list(map(int,f[1:-1].split(",")))
    g = list(map(int,g[1:-1].split(",")))

    def div(f,g):
        h,s = f,g
        qq = [0 for i in range(len(h)-len(s)+1)]
        for i in range(len(qq)):
            qq[i] = h[0]/s[0]
            if len(h) != 1:
                r = h[1:]
            else:
                r = [0] 
            for j in range(len(s)-1):
                r[j] = h[j+1]-qq[i]*s[j+1]
            while r[0] == 0 and len(r) !=1:
                del r[0]
            if len(r)<len(s):
                break
            h = r
        return [qq,r]

    def st(a,b):
        n = abs(len(a)-len(b))
        
        if len(a)>len(b):
            ans = a
            for i in range(len(b)):
                ans[i+n] -= b[i]
        else:
            ans = [-i for i in b]
            for i in range(len(a)):
                ans[i+n] += a[i]
        while ans[0] == 0 and len(ans) !=1:
            del ans[0]
        return ans

    def multi(a,b):
        if len(a)<len(b):
            a,b = b,a
        ans = [0 for i in range(len(a)+len(b))]
        a.reverse()
        b.reverse()
        for i in range(len(b)):
            for j in range(len(a)):
                ans[i+j]+=a[j]*b[i]
        ans.reverse()
        while ans[0] == 0 and len(ans) !=1:
            del ans[0]
        a.reverse()
        b.reverse()
        return ans

    if len(f)<len(g):
        h,s = g,f
    else:
        h,s = f,g
    num = 0
    a,b,c,d = [1],[0],[0],[1]
    while s != [0]:
        q,r = div(h,s)
        r0 = st(a,multi(q,c))
        r1 = st(b,multi(q,d))
        h,s = s,r
        a,c = c,r0
        b,d = d,r1
        num += 1
    print("gcd({},{}))={}".format(f,g,h))
    if len(f)<len(g):
        print("{}*{}+{}*{}={}".format(a,g,b,f,h))
    else:
        print("{}*{}+{}*{}={}".format(a,f,b,g,h))