0
votes

Besoin de créer une fonction qui retourne un booléen lorsqu'il est demandé: "Est-ce un nombre premier?"

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.")))  


1 commentaires

Il retournera false si vous entrez 0 . Votre == ne fais pas ce que vous voulez.


3 Réponses :


2
votes

Vous avez presque fait cela, il suffit de le changer comme ceci: xxx

éditer: comme indiqué par @Markransom, lorsque la variable i atteint la racine carrée de x , il est prudent de supposer qu'il n'y a plus de diviseurs possibles pour celui-ci: xxx


2 commentaires

Vous laisseriez le code continuer à faire (coûteux) divisions même après son sait la réponse?


Il n'est pas nécessaire de boucler tout le chemin de x , vous pouvez arrêter à int (sqrt (x)) .



1
votes

Je crois que la forme la plus simple de votre programme serait le long des lignes: xxx

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.

Utiliser finalement un tamis d'eratosthènes battra cette approche, même avec des optimisations.


8 commentaires

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


@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 n'inclut pas le point final. Je pensais que cela allait tester si 2% 2 == 0 , mais ce n'est pas le cas. Mes excuses. P.s. Pas besoin de la boucle d'aller à x-1 , il peut arrêter à int (sqrt (x)) .


@MarkRansom, j'ai couvert le problème de la racine carrée dans mon texte explicatif.


Désolé je l'ai manqué.



0
votes

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!
>>> 
  • lisant les autres codes (et les docs !!) LI>
  • puis jouez avec leur code dans oisif li>
  • Répétez le ci-dessus ul> p>


0 commentaires