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

introduction

Le "[Programme pour déterminer si un nombre entré en Python est un nombre premier] créé précédemment](https://qiita.com/totusuna/items/9ae6ada058fa4e9cd6f9)" a une fonction qui effectue une décomposition en facteurs premiers lorsqu'il s'agit d'un nombre composé. Je l'ai ajouté.

Principe du programme

Rappelant la méthode de décomposition des facteurs premiers que j'ai apprise à l'école primaire, j'ai décidé de continuer à diviser à partir du plus petit nombre premier. Plus précisément, créez une liste de nombres premiers en utilisant la gamme d'amorce de SymPy et continuez à diviser par un nombre divisible à partir de cette liste. Ensuite, lorsque la division a été effectuée jusqu'à la fin de la liste des nombres premiers, elle était terminée.

Programme réel

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

for i in primlist:
    while n % i == 0: #2
        n /= i
        yaku.append(i) #3

if not yaku: #4
    print(n, "Est un nombre premier.")
else:
    print(inn, "Est un nombre composé, et lorsqu'il est décomposé en facteurs premiers",yaku, "est.")

Écoulement brutal

  1. Créez une liste de nombres premiers jusqu'à (n + 1) / 2
  2. Trouvez un nombre divisible dans la liste des nombres premiers et continuez à diviser l'entier n jusqu'à ce qu'il ne soit plus divisible.
  3. Chaque fois que vous divisez, ajoutez le nombre premier divisé à la liste appelée yaku.
  4. S'il n'y a rien dans yaku, il est affiché sous forme de nombre premier. Si quelque chose est inclus, le résultat de la factorisation prime est affiché.

Ce que tu fais réellement

  1. Créé en # 1 en utilisant Sympy comme avant.
  2. Dans # 2, en utilisant la syntaxe while, il est possible de mettre en marche l'opération de continuer à diviser immédiatement sans utiliser if.
  3. Dans # 3, ajoutez le premier i divisé par yaku en faisant .append (i).
  4. Au n ° 4, j'ai remarqué que si yaku contient un nombre, c'est un nombre composé. Plus précisément, si vous utilisez la syntaxe if et définissez if ** not ** yaku, lorsqu'il n'y a rien dans yaku, le traitement ci-dessous sera lancé.

Des difficultés

Lors de la première programmation, la plage de la liste de nombres premiers créée par primerange () était la même que la fois précédente, "primerange (2, int (n ** (1/2)) + 1)". Ensuite, lorsque l'entier d'entrée était "2 x nombre premier", seulement 2 était ajouté à yaku, et il y avait un problème que la factorisation premier ne pouvait pas être effectuée avec précision. Plus précisément, lorsque j'ai entré un nombre tel que 14 (2 × 7), le résultat était "14 est un nombre composé, et décomposé en facteurs premiers, il est [2]. ] Est sorti. Par conséquent, j'ai défini la plage de la liste des nombres premiers sur "plage principale (2, (inn + 1) / 2)". En faisant cela, j'ai décidé de résoudre le problème précédent. A ce moment, en ajoutant +1 à inn, une liste de nombres premiers peut être créée jusqu'à un nombre premier même avec un entier de "2 x nombre premier". Plus précisément, lorsque 14 est entré, il devient la plage d'amorces (2, 7,5), de sorte que le contenu de la liste primaire devient [2, 3, 5, 7]. Si vous ne faites pas +1, vous obtiendrez la plage d'amorces (2, 7), de sorte que le contenu de la primelist sera [2, 3, 5] et 7 ne sera pas inclus dans le résultat de la factorisation première, donc une factorisation première précise Cela ne sera pas possible.

Réflexions

Si la plage de création de la liste des nombres premiers est trop large et que l'entier d'entrée devient grand (7 chiffres ou plus), la vitesse de calcul diminuera immédiatement. Par conséquent, je voudrais améliorer un peu le réglage de la plage et la méthode de décomposition des facteurs premiers. Merci d'avoir lu jusqu'au bout.

Recommended Posts

Décomposition en facteurs premiers ver.1 des entiers entrés en Python
Décomposition en facteurs premiers ver.2 des entiers entrés en Python
[Python 3] Décomposition des facteurs premiers en 14 lignes
Brouillage réversible d'entiers en Python
Projet Euler # 10 "somme des nombres premiers" en Python
Découvrez la fraction de la valeur saisie en python
Nombre premier en Python
Premier nombre 2 en Python
Implémentation du tri rapide en Python
Manipulation des pixels d'image en Python
Diviser timedelta dans la série Python 2.7
Générateur principal infini en Python3
Échappement automatique des paramètres MySQL en python
Gestion des fichiers JSON en Python
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
La loi des nombres en python
Implémentation du tri original en Python
Un programme qui détermine si un nombre entré en Python est un nombre premier
Conversion de la chaîne <-> date (date, datetime) en Python
Projet Euler # 3 "Maximum Prime Factors" en Python
Vérifiez le comportement du destroyer en Python
Pratique d'utilisation de ceci en Python (mauvais)
Arborescence de sortie des fichiers en Python
Afficher une liste d'alphabets en Python 3
Comparaison des modules de conversion japonais en Python3
Résumé de diverses instructions for en Python
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
Traffic Safety-kun: Reconnaissance des panneaux de signalisation 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
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
Résumé de la façon d'importer des fichiers dans Python 3
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
Résumé de l'utilisation de MNIST avec Python
Réécrire des éléments dans une boucle de listes (Python)
Trouvez des nombres premiers avec un code aussi court que possible en Python
Se débarrasser des images DICOM avec Python Partie 2