Re: Klammern in Ausgabe einfügen (Python 3.4)
Verfasst: Dienstag 7. April 2015, 11:13
@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:
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()