Sämtliche Zahlen in einer Liste miteinander multiplizieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BlackJack

Vedammt noch eins, gerade als ich den letzten Beitrag abgeschickt hatte fiel mir eine bessere Lösung ein, also eine die wirklich nur *direkt* die Teiler aufzählt ohne Doubletten:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from itertools import chain, count, imap, product as cartesian_product
from operator import mul


def product(values):
    return reduce(mul, values, 1)


def iter_prime_factors(number):
    for candidate in chain([2], count(3, 2)):
        exponent = 0
        while number % candidate == 0:
            number /= candidate
            exponent += 1
        if exponent:
            yield (candidate, exponent)
        if number == 1:
            return


def iter_divisors(number):
    powers = [
        [prime**i for i in xrange(exponent + 1)]
        for prime, exponent in iter_prime_factors(number)
    ]
    return imap(product, cartesian_product(*powers))


def main():
    number = 228627036
    print list(iter_prime_factors(number))
    divisors = list(iter_divisors(number))
    print divisors
    print len(divisors)


if __name__ == '__main__':
    main()
Ich nehme auch zurück dass ich nicht selbst auf die Teileranzahlfunktion gekommen wäre, denn die ergibt sich aus dieser Lösung trivialerweise. :-)
Antworten