Start | faktorisera
 

faktorisera



def faktorisera(tal): lst = [] for d in range(2,1+tal//2): if(tal%d == 0): lst.append(d) lst.extend(faktorisera(tal//d)) return(lst) return [tal] print(faktorisera(939549527209804492800))
def faktorisera(tal): lst = [] for d in range(2,1+tal//2): if(tal%d == 0): lst.append(d) lst.extend(faktorisera(tal//d)) return(lst) return [tal] for n in range(1,20): print(n,"=",faktorisera(n))

exempel



faktorisera(18)

1



Inledningsvis tal//2 kommer vara 9 vilket +1 blir 10. Så loopen arbetar med start på tal 2 fram till 9

Loopen börjar med att testa delbarheten från siffran 2. Dvs, d = 2. Är 18 delbart med 2?

def faktorisera(18):
    lst = []
    for d in range(2,10):
        if(18%2 == 0):
            lst.append(2)
            lst.extend(faktorisera(9))
            return(lst)

    return [tal]

Japp! 18 är delbart med 2. Så 2 läggs till listan. Samtidigt faktoriseras 18/2 = 9 rekursivt.

2



Är 9 delbart med 2 Svaret = Nej
Är 9 delbart med 3 Svaret = Ja

def faktorisera(9):
    lst = []
    for d in range(2,10):
        if(18%3 == 0):
            lst.append(3)
            lst.extend(faktorisera(3))
            return(lst)

    return [tal]

9 är delbart med 3, så 3 läggs till listan. Samtidigt faktoriseras 9/3 = 3 rekursivt.

3



Här kommer den enbart returnera [3] då det inte finns något att dela 3 med.

def faktorisera(3):
    lst = []
    for d in range(2,10):
        if(tal%d == 0):
            lst.append(d)
            lst.extend(faktorisera(tal//d))
            return(lst)

    return [3]


4



Dvs i (2) kommer listan byggas ut med [3], dvs lst = [3,3]


def faktorisera(9):
    lst = []
    for d in range(2,10):
        if(18%3 == 0):
            lst.append(3)
            lst.extend([3])
            return([3,3])

    return [tal]


5



Dvs i (1) kommer lst byggas ut med [3,3], dvs lst = [2,3,3]



def faktorisera(18):
    lst = []
    for d in range(2,10):
        if(18%2 == 0):
            lst.append(2)
            lst.extend([3,3])
            return([2,3,3])

    return [tal]

Vilket returneras...


def faktorisera(tal): lst = [] for d in range(2,1+tal//2): if(tal%d == 0): lst.append(d) lst.extend(faktorisera(tal//d)) return(lst) return [tal] def primtal(tal): if(faktorisera(tal)==[tal]): return True else: return False for n in range(1,20): print(n,"=",faktorisera(n),primtal(n))
def faktorisera(tal): lst = [] for d in range(2,1+tal//2): if(tal%d == 0): lst +=[d] lst += faktorisera(tal//d) return(lst) return [tal] def primtal(tal): return(faktorisera(tal)==[tal]) for n in range(1,20): print(n,"=",faktorisera(n),primtal(n)) print(primtal(673549))
14.172792434692 ms