Maison  >  Article  >  développement back-end  >  Comment pouvez-vous optimiser l’algorithme de force brute pour trouver des facteurs premiers en Python ?

Comment pouvez-vous optimiser l’algorithme de force brute pour trouver des facteurs premiers en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-07 19:09:03230parcourir

How can you optimize the brute-force algorithm for finding prime factors in Python?

Trouver des facteurs premiers en Python : un guide complet

La détermination des facteurs premiers est une tâche fondamentale en théorie des nombres. Une approche pour trouver le plus grand facteur premier consiste à utiliser des algorithmes de force brute. Cependant, tous les algorithmes ne sont pas créés égaux.

Algorithme de force brute

Un algorithme couramment utilisé consiste à tester les nombres de manière incrémentielle jusqu'à ce qu'un nombre soit trouvé qui se divise uniformément dans l'original. nombre. Prenons un exemple de code :

n = 600851475143
i = 2
while i * i < n:
    while n % i == 0:
        n = n / i
    i = i + 1

print(n)

Ce code recherche le plus grand facteur premier de 600851475143. Cependant, il souffre d'inefficacité et prend environ 0,01 seconde.

Optimisé Algorithme de force brute

Une version améliorée de l'algorithme de force brute peut réduire considérablement le temps d'exécution :

def largest_prime_factor(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
    return n

Cet algorithme se termine dès que i dépasse la racine carrée de n , ce qui élimine efficacement le test de nombreux nombres inutiles. En conséquence, le temps d'exécution est considérablement réduit, s'exécutant en environ 388 microsecondes pour la même entrée.

Factorisation première complète

Si l'objectif est d'obtenir le nombre premier complet factorisation d'un nombre, une légère modification de l'algorithme est requise :

def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

Cet algorithme maintient une liste appelée « facteurs » qui stocke les facteurs premiers au fur et à mesure qu'ils sont trouvés. Lorsque n est supérieur à 1 à la fin, il indique le facteur premier final, qui est ensuite ajouté à la liste.

En conclusion, choisir un algorithme de factorisation premier efficace est crucial pour les performances. L'algorithme de force brute optimisé offre une amélioration significative de la vitesse, tandis que l'algorithme de factorisation complet offre la factorisation première complète d'un nombre donné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn