Überraschenderweise gibt es in der Standard-Python-Bibliothek keine Primfaktorisierung. Ich habe es einfach mit Counter geschrieben. In 14 Zeilen von oben.
prime_factorization.py
from math import sqrt
from collections import Counter
def prime_factorization(n):
counter = Counter()
for i in range(2, int(sqrt(n)) + 1):
while n % i == 0:
n //= i
counter[i] += 1
if n != 1:
counter[n] += 1
return list(counter.items())
def prime_factors(n):
return set(map(lambda x: x[0], prime_factorization(n)))
if __name__ == '__main__':
# 2020 = 2^2 * 5^1 * 101^1
print(prime_factorization(2020)) # => [(2, 2), (5, 1), (101, 1)]
print(prime_factors(2020)) # => {2, 101, 5}
#Wenn 1 eine Liste von zurückgibt
print(prime_factorization(1)) # => []
Hochgeschwindigkeits-Primfaktorisierung mit Python - für Wettbewerbsprofis
Recommended Posts