Seite 2 von 2

Re: Klammern in Ausgabe einfügen (Python 3.4)

Verfasst: Dienstag 7. April 2015, 11:13
von BlackJack
@nyxx: `primfaktoren` enthält zu viele Werte. Die meisten davon sind immer 0. Günstiger wäre es eine leere Liste anzulegen und jedes mal wenn man einen Faktor gefunden hat, diesen als Tupel (Faktor, Exponent) an die Liste anzuhängen. Oder man könnte sich an der Stelle mal Generatorfunktionen anschauen und die Tupel gar nicht in einer Datenstruktur speichern sondern ”liefern” sobald sie feststehen.

Ein bisschen Effizienter wird es wenn man nur die 2 und ab 3 alle ungeraden Zahlen testet, denn gerade Zahlen ausser der zwei kommen als Primfaktor ja nicht in Frage.

Das Formatieren der Ausgabe würde ich in eine eigene Funktion auslagern.

Ich komme dann auf so etwas:

Code: Alles auswählen

from __future__ import absolute_import, division, print_function
from itertools import chain, count


def factor(number):
    if number < 2:
        raise ValueError('n must be >= 2')
    for candidate in chain([2], count(3, 2)):
        if number == 1:
            break
        exponent = 0
        while number % candidate == 0 and number >= candidate:
            number //= candidate
            exponent += 1
        if exponent:
            yield (candidate, exponent)


def format_factors(factors):
    return '*'.join(
        str(factor) if exponent == 1 else '({0}^{1})'.format(factor, exponent)
        for factor, exponent in factors
    )


def main():
    numbers = [
        2, 42, 23, 4711, 1024, 208115618, 509018089, 185078311, 910167936
    ]
    for number in numbers:
        print('{0} = {1}'.format(number, format_factors(factor(number))))


if __name__ == '__main__':
    main()

Re: Klammern in Ausgabe einfügen (Python 3.4)

Verfasst: Dienstag 7. April 2015, 22:29
von nyxx
Super, danke euch beiden. Insbesondere an BlackJack für die eleganten Vorschläge. Ich denke jetzt ist das Thema ausreichend durchgekaut.