J'essaie de créer une fonction qui testera si un numéro est un nombre premier, puis retourne vrai ou faux. Je suis un débutant extrême à Python, alors rendez-vous votre code aussi simple que possible. Voici ce que j'ai essayé jusqu'à présent (ne revient que vrai):
def isPrime(x): x = int(x) for i in range(2, x): if(x % i == 0): x == False else: x == True return x print(isPrime(input("Enter a prime number.")))
3 Réponses :
Vous avez presque fait cela, il suffit de le changer comme ceci: éditer: comme indiqué par @Markransom, lorsque la variable i code> atteint la racine carrée de
x code>, il est prudent de supposer qu'il n'y a plus de diviseurs possibles pour celui-ci: p>
Vous laisseriez le code continuer à faire (coûteux) divisions même après son sait i> la réponse?
Il n'est pas nécessaire de boucler tout le chemin de x code>, vous pouvez arrêter à
int (sqrt (x)) code>.
Je crois que la forme la plus simple de votre programme serait le long des lignes: mais ce n'est pas aussi efficace que possible. Pour faire mieux, nous traiterions 2 (et tous les nombres paires) comme cas particulier et permettrons uniquement au diviseur de couvrir les nombres impairs de 3 à la racine carrée du numéro que nous testons. Plus nous pouvons les divisions que nous pouvons éviter, le plus rapide. P> Utiliser finalement un tamis d'eratosthènes battra cette approche, même avec des optimisations. P> P>
Et si l'entrée est 2 ou moins?
@ RFROES87, j'ai noté que c'était la forme de fonctionnement la plus simple du code d'origine des singes qui incluait la fonctionnalité i> vous avez noté. Mais oui, cela devrait être manipulé et je l'ai mis à jour.
Merci j'apprécie vraiment votre aide!
Votre mise à jour ne gère toujours pas correctement le cas de x = 2 code>.
@MarkRansom, je l'exécute, j'entre 2, il retourne vrai - qu'est-ce que je manque?
Désolé, c'est ce que j'avais manqué - plage code> n'inclut pas le point final. Je pensais que cela allait tester
si 2% 2 == 0 code>, mais ce n'est pas le cas. Mes excuses. P.s. Pas besoin de la boucle d'aller à
x-1 code>, il peut arrêter à
int (sqrt (x)) code>.
@MarkRansom, j'ai couvert le problème de la racine carrée dans mon texte explicatif.
Désolé je l'ai manqué.
Lorsque vous avez tapé ceci, je pense que vous vouliez dire comme suit ci-dessous:
def isPrime(h): h = int(h) test = None for x in range(2, h): if (h%x) == 0: test = False print(f"{test}, the number {h} is not a prime!") break else: test = True print(f"{test}ly, the number {h} is a prime!") ## Then I'll run the call to the function in python IDLE as: >>> >>> isPrime(input("Enter a number.\n")) Enter a number. 11 Truely, the number 11 is a prime! >>> >>> isPrime(input("Enter a number.\n")) Enter a number. 110 False, the number 110 is not a prime! >>>
Il retournera
false code> si vous entrez
0 code>. Votre
== code> ne fais pas ce que vous voulez.