Jugement des nombres premiers avec python

introduction

Ceci est un article pour les débutants par les débutants.

J'étais en train de résoudre le problème cette fois aussi, et finalement j'ai pu le résoudre, donc j'écris cet article avec l'intention d'en faire un mémorandum et de le partager.

Cette fois, nous allons créer un programme pour déterminer si un nombre naturel est un nombre premier!

Création de programme

Eh bien, je vais le créer tout de suite.

Tout d'abord, permettez-moi de mentionner brièvement ce qu'est un nombre premier.

・ Nombre premier: 1 et un nombre qui ne peut être divisé que par le nombre lui-même (1 n'est pas inclus)

En d'autres termes, j'ai pensé qu'il serait bon de diviser le nombre par le nombre de 2 à (le nombre-1) et de vérifier le reste!

Par conséquent, nous allons définir une fonction appelée p_judge. (La raison de p est que les nombres premiers sont souvent représentés par p dans les problèmes mathématiques lol)

#Définir la fonction
def p_judge(a):

Maintenant, réfléchissons à la façon de le traiter. Tout d'abord, il y a une tâche de substituer un nombre de 2 à (le nombre-1) et de le diviser, il semble donc que ** for statement ** puisse être utilisé!

En outre, le processus est susceptible de se ramifier pour déterminer s'il s'agit d'un nombre premier ou non. Par conséquent, il semble que ** l'instruction if ** puisse être utilisée!

De ce qui précède, j'ai pensé que combiner pour et si fonctionnerait.

Ce qui suit est un programme qui montre le processus

#Définir la fonction
def p_judge(a):
    for x in range(2,a):#À partir de 2 (nombre à vérifier-Remplacez x par 1)
        if a%x == 0:#Si a ÷ x est divisible
            print('False')#Sortie False
            return#Revenez à l'appelant de la fonction.
    print('True')#Après avoir effacé tous les programmes ci-dessus, affichez True

Cela semble bon! !! J'ai écrit les commentaires en détail pour une compréhension facile. Si vous faites une erreur, veuillez la signaler.

Ceci complète le contour! Tout ce que vous avez à faire est de placer l'entrée pour recevoir la valeur, et d'ajouter un peu plus de description pour utiliser la fonction bien définie.

Ce qui suit est le programme terminé

a = input()#Recevoir la valeur (à ce moment, recevez-la sous forme de chaîne de caractères)
a = int(a)#Convertir un reçu sous forme de chaîne en entier

def p_judge(a):
    for x in range(2,a):#À partir de 2 (nombre à vérifier-Remplacez x par 1)
        if a%x == 0:#Si a ÷ x est divisible
            print('False')#Sortie False
            return#Revenez à l'appelant de la fonction.

    print('True')#Après avoir effacé tous les programmes ci-dessus, affichez True

p_judge(a)#Alors, pour a, la fonction p_Utiliser le juge

Oui c'est fait! !!

De côté

Il m'a fallu beaucoup de temps pour réaliser ce programme ... Parce que je ne savais pas revenir, si et pour.

Je me suis dit que si et pour étaient des fonctions, donc j'y mettais généralement des retours. Donc, je devenais toujours fou avec une erreur disant `` retour en dehors de la fonction '' lol

Vous avez résolu ce problème en définissant une nouvelle fonction. Je suis encore débutant, donc il y a beaucoup de choses que je ne comprends pas, mais je pense que c'est trop difficile à ce niveau. Tohoho ...

Postscript

Nous avons reçu quelques commentaires, nous allons donc modifier le programme!

(1) Il est préférable d'utiliser une fonction qui renvoie True et False au lieu de print.

→ Il semble que vous deviez effacer la partie imprimée et la changer pour revenir.

(2) Il est préférable de considérer le traitement lorsque 1, 0 ou un nombre négatif est donné comme argument.

→ Cela semble fonctionner si vous jouez un peu avec l'instruction if.

Pour le moment, si vous reflétez ces ① et ②, cela ressemblera à ceci.

a = input()
a = int(a)

def p_judge(a):
    if a <= 1:#Si a est inférieur ou égal à 1
        return False#Renvoie False
    for x in range(3,a,2):#3 à un-Remplacez par un nombre qui augmente de 2 jusqu'à 1 en x
        if a%x == 0:
            return False#Renvoie False
        
    return True#Renvoie True

print(p_judge(a))

C'est la partie où le commentaire est écrit.

J'ai essayé de le mettre dans une instruction if en utilisant ou, mais cela n'a pas fonctionné et j'ai dû le diviser en deux ...

Ce sont ces deux points qui seront corrigés ensuite.

(3) Puisque les nombres pairs ne sont pas des nombres premiers autres que 2, le temps de traitement peut être réduit en effectuant seulement 2 et même en traitant en premier et en bouclant uniquement les nombres impairs.

④ Vous pouvez vérifier jusqu'à la racine carrée pour voir si elle est divisible.

Tout d'abord, nous corrigerons ③. Cela semble être bon si vous attachez si à nouveau. En d'autres termes, les nombres pairs autres que 2 doivent être exclus. Le programme suivant reflète cela

a = input()
a = int(a)

def p_judge(a):
    if a == 2:#Si a vaut 2
        return True#Renvoie True
    elif a <= 1 or a%2 == 0:#Si a est inférieur ou égal à 1 ou si a est divisible par 2
        return False#Renvoie False
    for x in range(3,a,2):
        if a%x == 0:
            return False
        
    return True

print(p_judge(a))

Au fait, concernant ④, j'ai moi-même appris ce fait pour la première fois ... lol Si vous me demandez, c'est certainement le cas. Dans le cas des nombres composites, il y a des dichotomies, mais il y a des paires de diviseurs. (Par exemple, 64 correspond à 4x16 et 16x4, etc.) Et ce nombre de points de retournement n'est que la partie de la racine carrée. (Si c'est 64, il sera replié à 8x8), donc si vous regardez la racine carrée, vous n'avez pas à regarder au-delà. Nous refléterons cela dans le programme.

La racine carrée est représentée par une méthode appelée sqrt dans le module mathématique. Ensuite, afin de tronquer la valeur après la virgule décimale, nous utilisons également une méthode appelée floor du module math.

Voici le programme modifié.

import math#importer un module mathématique

a = input()
a = int(a)

a = math.sqrt(a)#Utilisez sqrt pour représenter la racine carrée d'un
a = math.floor(a)#Tronquer a après la virgule décimale en utilisant floor

def p_judge(a):
    if a == 2:
        return True
    elif a <= 1 or a%2 == 0:
        return False
    for x in range(3,a+1,2):#Parce que a changé+1 besoin de
        if a%x == 0:
            return False
        
    return True

print(p_judge(a))

C'est tout! !! Merci à tous ceux qui ont commenté!

en conclusion

Cette fois, j'ai fait un programme de jugement des nombres premiers. Si vous avez des conseils, n'hésitez pas à commenter et je le refléterai à chaque fois dans l'article.

Merci d'avoir lu jusqu'au bout! !! !!

Recommended Posts

Jugement des nombres premiers avec python
Jugement des nombres premiers par Python
Algorithme en Python (jugement premier)
Sortie du journal de test unitaire avec python
FizzBuzz en Python3
Grattage avec Python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Test d'intégrité Python
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Python] Test super facile avec instruction assert
Test de stress avec Locust écrit en Python
Tester les programmes non fonctionnalisés Python avec GitLab CI
Test WebUI avec Python2.6 + Selenium 2.44.0 - paramètre de profil
Générer des données de test japonais avec Python Faker
Comment faire un test de sac avec python
Intégration avec setuptools / python setup.py test / pytest-runner
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Renforcez avec le test de code ⑦
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Créez des données de test comme ça avec Python (partie 1)
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Renforcez avec le test de code ⑨
Apprendre Python avec ChemTHEATER 05-1
Renforcez avec le test de code ③
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Grattage avec Python + PhantomJS
Test numpy Python Basic 8
Énumération des nombres premiers et jugement des nombres premiers en Python
Mémo du package de test Python
Conduisez WebDriver avec python