Étonnamment, il n'y a pas de factorisation principale dans la bibliothèque Python standard. Je l'ai écrit simplement en utilisant Counter. En 14 lignes à partir du haut.
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}
#Si 1 renvoie une liste de
print(prime_factorization(1)) # => []
Factorisation prime rapide avec Python-pour les professionnels de la concurrence-
Recommended Posts