Samstag, 29. Dezember 2012

Teilbarkeit

Manchmal ist es sinnvoll alle Teiler einer Zahl zu ermitteln, etwa um sich an dieser Aufgabe zu versuchen. Ein ganz erster Versuch, eine Funktion zu schreiben, die alle Teiler einer Zahl liefert, ist:
def teiler_ermitteln(zahl):
    ''' Soll alle Teiler einer ganzen Zahl ermitteln
    und als Liste zurueckgeben.
    
    '''
    liste = []
    liste.extend([1,zahl])
    
    ende = zahl
    i = 1
    
    while i < ende:
        
        i += 1

        if i == ende:
            break
        
        if (zahl / i) % 1 == 0.0:
            
            liste.append(i)
            
            if int(zahl/i) != i:
                liste.append(int(zahl/i))
                
            ende = int(zahl/i)

    return liste 


ergebnis = teiler_ermitteln(72)

ergebnis.sort()

print(ergebnis)
Das Skript arbeitet so nur für natürliche Zahlen größer 0. Da aber a \mid b gilt, so gilt auch -a \mid b und a \mid -bMan kann sich also bei der Untersuchung des Teilbarkeitsbegriffs auf natürliche Zahlen beschränken.

Um die Programmieraufgabe allerdings zu lösen, reicht diese Version vollkommen aus:
def teiler_ermitteln(zahl):
    ''' Soll alle Teiler einer ganzen Zahl ermitteln
    und als Liste zurueckgeben.
     
    '''
    liste = []
    liste.extend([1,zahl])
     
    ende = zahl
    i = 1
     
    while i < ende:
         
        i += 1
 
        if i == ende:
            break
         
        if (zahl / i) % 1 == 0.0:
             
            liste.append(i)
             
            if int(zahl/i) != i:
                liste.append(int(zahl/i))
                 
            ende = int(zahl/i)
            
    liste.sort()
    return liste 
 

for i in range(1,10000):

    teiler = teiler_ermitteln(i)
    teiler.pop()
    summe = sum(teiler)
    
    if summe > i and i % 2 != 0:
        print("{} ist abundant.".format(i))
    elif summe == i:
        print("{} ist vollkommen.".format(i))
Ich denke allerdings, dass in der eigentlichen Funktion noch deutliches Optimierungspotential steckt.

Keine Kommentare:

Kommentar veröffentlichen