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!
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! !!
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 ...
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é!
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