def descomposa(num, d=2):
    if d == num:
        return [d]
    else:
        if num%d == 0:
            num = num//d
            l = [d] + descomposa(num, d)
        else:
            if d == 2:
                d = d +1
            else:
                d = d + 2
            l = descomposa(num, d)
        return l

def descomposa_m(num, l, d=2):
    if d == num:
        l.append(d)
    else:
        if num%d == 0:
            num = num//d
            descomposa_m(num, l, d)
            l.insert(0, d)
        else:
            if d == 2:
                d = d +1
            else:
                d = d + 2
            descomposa_m(num, l, d)

def divisors_1(num, d=2):
    if d == num:
        return [d]
    else:
        if num%d == 0:
            num = num//d
            l = divisors_1(num, d)
            if d not in l:
                l = [d] + divisors_1(num, d)
        else:
            if d == 2:
                d = d +1
            else:
                d = d + 2
            l = divisors_1(num, d)
        return l

def divisors_2(n):
   l=descomposa(n)
   return diferents_2(l)

def diferents_2(l):
    if len(l)>1:
        if l[0]==l[1]:
            return diferents_2(l[1:])
        else:
            return [l[0]]+diferents_2(l[1:])
    else:
        return [l[0]]

def divisors_3(n):
   l=descomposa(n)
   diferents_3(l, 0)
   return l

def diferents_3(l, i):
    if i < len(l):
        if l.count(l[i]) > 1:
            l.pop(i)
            diferents_3(l, i)
        else:
            diferents_3(l, i+1)


divisors = divisors_1
#divisors = divisors_2
#divisors = divisors_3


