def estPremier(n):
if n < 2:
return False d = 2
while d**2 <= n:
if n % d == 0:
return False d += 1
return True
def liste_premiers(n):
liste = []
for p in range(2, n+1):
if estPremier(p):
liste.append(p) return liste
def valuation_p_adique(n, p):
valu = 0
while n % p == 0:
valu += 1 n = n//p return valu def val(n, p):
if n % p != 0:
return 0 else:
return 1 + val(n//p, p) def plus_petit_facteur_premier(n):
d = 2
while n % d != 0 or not estPremier(d):
d += 1 return d
def decomposition(n):
if n == 1:
return []
else:
p = plus_petit_facteur_premier(n) v = val(n, p)
L = decomposition(n // p**v) L.append([p, v])
return L
1