def main():
    try:
        a = int(input())
        if isinstance(a, int):
            a = int(a)
            if a ==2:
                print('YES')
            if a > 1:
                for i in range(2, a):
                    if a % i == 0:
                        print('NO')
                        break
                    else:
                        print('YES')
                        break
            else:
                print('NO')
        else:
            print('NO')
    except EOFError:
        print('NO')
    except ValueError:
        print('NO')
main()

Ce code fonctionne mais il calcule des nombres énormes comme nombre premier, par exemple 3456734572525. Il réussit pour 4 cas de test sur 5. J'ai d'abord pensé qu'il échouait sur des nombres décimaux ou 0 mais ce n'était pas le cas.

0
Margad Gereltbaatar 28 août 2020 à 15:37

3 réponses

Meilleure réponse

La boucle for ne s'exécute jamais jusqu'à la fin, car indépendamment du fait que a % i == 0 vous rompez la boucle. Vous devez déplacer votre print("YES") en dehors de la boucle et utiliser return au lieu de break pour vous assurer que votre fonction n'exécute pas ce code si votre boucle se rompt. Essaye ça:

def main():
    try:
        a = int(input())
        if isinstance(a, int):
            a = int(a)
            if a ==2:
                print('YES')
            if a > 1:
                for i in range(2, a):
                    if a % i == 0:
                        print('NO')
                        return
                print('YES')
                return
            else:
                print('NO')
        else:
            print('NO')
    except EOFError:
        print('NO')
    except ValueError:
        print('NO')
main()
0
Flostian 28 août 2020 à 13:06

Votre code est en fait incorrect même au début.
Vous utilisez «break» à l'intérieur de la boucle, après une vérification «if», donc en gros vous ne vérifiez qu'une seule fois. Donc, tout ce que votre code fait est de dire si le nombre est divisible par 2.

try:
    a = int(input())
    flag = 0
    if isinstance(a, int):
        a = int(a)
        if a==1:
            print('Neither')
        elif a ==2:
            print('YES')
        else:
            for i in range(2, a):
                if a % i == 0:
                    flag=1
                    break
    else:
        print('NO')
except EOFError:
    print('NO')
except ValueError:
    print('NO')
if flag:
    print('NO')
else:
    print('YES')
0
hypnos 28 août 2020 à 13:13

Vous sortez de la boucle lors du premier passage
dites que vous mettez 9, pensez-y
cela échouerait la condition == 2
puis appuyez sur une condition% i == 0 et comme 9% 2 = 1, il renverrait OUI

Il y a de nombreuses erreurs avec ce programme à côté de cela, mais le problème principal est de se briser après le premier passage, cela n'a aucun sens, si vous supprimez le break et imprimez sur le else pour le if a% i == 0 cela fonctionnerait, mais il y a de nombreuses optimisations que vous pourriez y apporter.

Je recommande de suivre quelques cours / tutoriels sur python et de ne pas essayer de sauter avec peu de connaissances préalables
bonne chance

0
William Ponsonby 28 août 2020 à 13:07