Python :: Aufgabe #91 :: Lösung #2

4 Lösungen Lösungen öffentlich
#91

Zahl als Produkt zweier Faktoren ohne 0

Fortgeschrittener - Python von Veigar - 24.11.2015 um 16:33 Uhr
Schreibe ein Programm das dir für jede beliebige Zahl ausgibt ob sie als Produkt zweier natürlicher Zahlen die beide keine "0" enthalten darstellbar ist.

Zum Beispiel:
deinAlgorithmus(10) =True (5*2)
deinAlgorithmus(100)= True (25*4)

Sehe aber bitte davon ab ganz einfach ein Programm zu schreiben das für alle Zahlen die kleiner sind als die zu testende Zahl und die keine Nullen enthält überprüft ob der "Gegenfaktor" (also die Zahl die mit der Zahn multipliziert die gesuchte zahl ergibt) ebenfalls keine 0en enthält weil das Programm für sehr hohe Zahlen (Milliarde+) eine moderate Rechenzeit in Anspruch nehmen soll.
#2
vote_ok
von Nachbar (2820 Punkte) - 27.10.2016 um 19:37 Uhr

Zitat:

1000.000.000 dauert 1 Minute 14 Sekunden. Mathematisch wahrscheinlich schlecht gelöst aber mit geht es um das Programmieren und das sollte geklappt haben:


Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-

def has_zero(zahl):
    tmpString = ""
    zahlString = str(zahl)
    for i in zahlString:
        tmpString = tmpString + i
        if int(tmpString) % 10 == 0:
            return True
    return False
  
def no_zeros_in_product(zahl):
    m1, m2 = 2, 0
    a = []
    b = False
    multiplikatoren = {}
    # Multiplikatoren finden
    while m1 < zahl:
        if zahl % m1 == 0:
            m2 = zahl / m1
            # Wiederholungen ausschließen
            if m2 not in a:
                a.append(m2), a.append(m1)
                # Prüfen ob 0en in Multiplikatoren
                if has_zero(m2) == False and has_zero(m1) == False:
                    multiplikatoren[m1] = m2
                    b = True
        m1 = m1 + 1
    # Ausgabe
    if b == False:
        print "False"
    else:
        print "True"
        for key in multiplikatoren:
            print str(key) + " * " + str(multiplikatoren.get(key))

no_zeros_in_product(1000000)

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben