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 entrez0 code>. Votre== code> ne fais pas ce que vous voulez.