Décomposition en facteurs premiers ver.2 des entiers entrés en Python

introduction

Le problème que le temps d'exécution est long lorsque l'entier d'entrée est un nombre premier dans la [Décomposition du facteur premier ver.1 de l'entrée entière en Python] précédemment créée (https://qiita.com/totusuna/items/87a10755a25dc310c17a) Résoudre.

Programme réel

from sympy import primerange
 inn = n = int (input ("Veuillez saisir le nombre que vous voulez vérifier s'il s'agit d'un nombre premier. >>"))
num = int(n**(1/2)) + 1
primlist = list(primerange(2,num)) 
yaku = []

for i in primlist:
    if inn % i == 0: #1
 print (inn, "est un nombre composé.")
        for i in list(primerange(i, (n +1)/i)):  #2
            if n == 1: #3
                break
            while n % i == 0:
                n /= i
                yaku.append(i)

 print ("La décomposition du facteur premier est", yaku, ".")
        break
    elif i == primlist[-1] :
 print (inn, "est un nombre premier.")

point de changement

Afin de résoudre le problème selon lequel le jugement lorsqu'il s'agit d'un nombre premier est trop lent, il est jugé si l'entier entré avant d'effectuer la décomposition des facteurs premiers en # 1 est un nombre premier. S'il s'agit d'un nombre composé, le traitement à partir du n ° 2 est effectué. La syntaxe if de # 3 a été ajoutée pour afficher le résultat immédiatement lorsque la factorisation des nombres premiers de n est terminée avant d'aller à la fin de la liste des nombres premiers.

Comparaison de vitesse

Le temps a été mesuré en utilisant %% timeit dans Jupyter Notebook. Nous avons utilisé 2281607 comme nombre premier à 7 chiffres et 5241234 (2 x 3 x 873539) comme nombre composé à 7 chiffres. nombre premier ver.1:1.98 s ± 30.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) ver.2:1.17 ms ± 25.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Nombre composé ver.1:4.63 s ± 40.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) ver.2:4.56 s ± 75.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Considération

La vitesse d'exécution lorsqu'un nombre premier est entré est de 1,98 ** s ** → 1,17 ** ms **, ce qui représente une amélioration de vitesse significative. Cependant, lorsque le nombre de composites a été entré, la méthode de traitement proprement dite n'a pas changé, donc aucune amélioration n'a été observée puisque 4,63 s → 4,56 s.

Réflexions

Je suis satisfait pour l'instant car j'ai pu améliorer la vitesse d'exécution alors qu'il s'agissait d'un nombre premier, qui était l'objectif cette fois. Cependant, si nous n'améliorons pas la méthode de factorisation des nombres premiers, nous ne pouvons pas améliorer la vitesse essentielle, c'est pourquoi je voudrais aborder ce point. Merci d'avoir lu jusqu'au bout.

Recommended Posts

Décomposition en facteurs premiers ver.2 des entiers entrés en Python
Décomposition en facteurs premiers ver.1 des entiers entrés en Python
[Python 3] Décomposition des facteurs premiers en 14 lignes
Brouillage réversible d'entiers en Python
Séquence de touches en Python
Projet Euler # 10 "somme des nombres premiers" en Python
Séquence de touches en Python
Nombre premier en Python
Premier nombre 2 en Python
Note d'entrée Python dans AtCoder
Jugement d'équivalence d'objet en Python
Implémentation du tri rapide en Python
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
Manipulation des pixels d'image en Python
Diviser timedelta dans la série Python 2.7
Générateur principal infini en Python3
Gestion des fichiers JSON en Python
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
Voyons voir l'utilisation de l'entrée en python
La loi des nombres en python
Implémentation du tri original en Python
Conversion de la chaîne <-> date (date, datetime) en Python
Projet Euler # 3 "Maximum Prime Factors" en Python
Entrée / sortie de données en Python (CSV, JSON)
Vérifiez le comportement du destroyer en Python
Pratique d'utilisation de ceci en Python (mauvais)
Théorie générale de la relativité en Python: Introduction
Arborescence de sortie des fichiers en Python
Afficher une liste d'alphabets en Python 3
Comparaison des modules de conversion japonais en Python3
Projet Euler # 7 "1000 1er nombre premier" en Python
Le résultat de l'installation de python sur Anaconda
Modèles Gang of Four (GoF) en Python
Principes de base pour exécuter NoxPlayer en Python
Remplacement en bloc des chaînes dans les tableaux Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Résumé des méthodes intégrées, etc. de la liste Python
J'ai cherché un nombre premier avec python
Utilisation d'opérateurs non logiques de ou en python
À la recherche du FizzBuzz le plus rapide en Python
Exemple pratique d'architecture hexagonale en Python
Projet Euler # 17 "Nombre de caractères" en Python
Equation de mouvement à double pendule en python
Débarrassez-vous des images DICOM en Python
[Python] Chapitre 02-03 Bases des programmes Python (entrée / sortie)
Statut de chaque système de traitement Python en 2020
Projet Euler # 1 "Multiple de 3 et 5" en Python
Tapez Python pour implémenter l'expansion algébrique (1) ~ Monoïdes, groupes, anneaux, anneaux entiers ~
Sortie du nombre de cœurs de processeur en Python
Dessiner un graphique d'une fonction quadratique en Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Recevoir le websocket de l'API kabu station ® en Python
Fonctionnement sans assistance des feuilles de calcul Google (etc.) en Python
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
Afficher le résultat du traitement de la géométrie en Python
Énumération des nombres premiers et jugement des nombres premiers en Python
Copiez la liste en Python