Pour les élèves en Maths expertes + NSI.
L'exercice 6 de la feuille n°1. Partie 2
Avec un algorithme en , qui met pour traiter le cas , on sait qu'il mettra pour . En effet, on complète le tableau de proportionnalité suivant.
Entrée | Temps (s) |
---|---|
Nous avons reproduit ici notre script de la partie 1, en :
def factor(n): """Renvoie une liste, la décomposition en facteurs premiers de n. >>> factor(6) [2, 3] >>> factor(8) [2, 2, 2] """ assert n > 0 Factor = [] p = 2 while n > 1: if n % p == 0: n //= p Factor.append(p) while n % p == 0: n //= p Factor.append(p) p += 1 return Factor
La question est de faire un nouveau script qui donne une décomposition en facteurs premiers, en .
C'était l'objet de l'exercice. Voici une solution.
def factor(n): """ Renvoie la décomposition en facteurs premiers de n >>> factor(6) [2, 3] >>> factor(50) [2, 5, 5] """ assert n > 0 Factor = [] p = 2 while p * p <= n: if n % p == 0: n //= p Factor.append(p) while n % p == 0: n //= p Factor.append(p) p += 1 if n > 1: Factor.append(n) return Factor
On sort de la boucle quand .
Dans ce cas, ne possède aucun facteur premier inférieur ou égal à .
On déduit que , ou alors est premier.
Ce script permet d'obtenir très vite la décomposition en facteurs premiers de nombres tels que , en effet, le premier facteur amène à qui est un nombre premier.