Trouvez des nombres premiers avec un code aussi court que possible en Python

introduction

En regardant cet article, j'ai été impressionné si Tetris pouvait être réalisé en seulement sept lignes. Mais je ne peux pas du tout javascript, donc je ne comprends pas le sens. (Je veux dire, je comprends la syntaxe, mais je ne sais pas ce que je fais) Cependant, j'ai réalisé qu'un revêtement court serait cool, et j'ai pensé que Python pourrait le faire, alors je vais le présenter. De plus, je n'ai pas de vocabulaire, alors pardonnez-moi même si la phrase est étrange.

Algorithme de jugement des nombres normaux

Tout d'abord, essayez de construire normalement un programme de jugement des nombres premiers. (La vitesse d'exécution n'est pas prise en compte)

JudgeNum=int(input("nombre?"))
prime=True
for i in range(2,JudgeNum):
    if JudgeNum%i==0:
        prime=False
print(prime)

Résultat d'exécution

nombre?5
True

C'est la réponse habituelle. Même si vous montrez cela à d'autres personnes, c'est une réaction comme "Hmm". Raccourcissons un peu ceci pour le moment

Algorithme de jugement des nombres premiers courts

Premier

int(input("nombre?"))#Est
int(input())#Remplacer par
JudgeNum#Est
n#Remplacer par

Ensuite, utilisez la notation d'inclusion.

prime=True
for i in range(2,n):
    if n%i==0:
        prime=False

Ce mec

prime=not[i for i in range(2,n) if n%2==0]

Est presque le même que Dans cette notation d'inclusion, le nombre de fissures est ajouté à la liste.

En python, une liste vide est évaluée comme False, donc en la retournant avec not, la liste vide (ce qui signifie qu'elle n'était pas divisible par tous les nombres) est un nombre premier. (vocabulaire) (J'ai essayé de le retourner avec ~ au lieu de pas pendant un moment, mais je ne pouvais pas parce que le flip est une liste.)

Ensuite, vous n'avez pas besoin de la variable principale. Alors

print(not[i for i in range(2,n) if n%2==0])

Peut être raccourci avec. Finalement

n=int(input())
print(not[i for i in range(2,n) if n%2==0])

J'ai pu le raccourcir à deux lignes.

Algorithme de jugement premier sur une ligne

Si vous êtes arrivé jusqu'ici, j'aimerais avoir une ligne. Mais lorsque vous déclarez une variable, vous devez la casser. Puisque l'algorithme de jugement des nombres premiers est presque impossible sans utiliser de variables, est-il nécessaire d'avoir au moins deux lignes? J'aimerais pouvoir le faire avec des virgules comme des arguments de fonction ... . . . ! Dois-je utiliser une fonction! Cependant, c'est impossible avec les fonctions ordinaires. Par conséquent, nous utiliserons une fonction anonyme (lambda). Prends juste n comme argument

(lambda n:print(not[i for i in range(2,n)if n%i==0]))(int(input()))

Vous pouvez maintenant le compresser sur une seule ligne. Savez-vous que deux lignes ont moins de caractères?

finalement

C'est un revêtement court sur lequel j'ai travaillé dur. Si vous avez un code plus court que celui-ci, veuillez me le faire savoir.

Recommended Posts

Trouvez des nombres premiers avec un code aussi court que possible en Python
Nombre premier en Python
J'ai cherché un nombre premier avec python
Projet Euler # 10 "somme des nombres premiers" en Python
Trouver des nombres premiers récursivement
La chose semblable à une recherche de liste en Python
Premier nombre 2 en Python
Gérer les nombres premiers avec Python / Ruby / PHP / Golang (Go)
[Python 3] Décomposition des facteurs premiers en 14 lignes
Trouver des erreurs en Python
Juger les nombres premiers avec python
Trouvez l'ordre / la combinaison en Python
Trouvons le rapport de circonférence avec Python
Gérer les nombres complexes en Python
Tester avec des nombres aléatoires en Python
Utilisez le tissu tel quel en python (fabric3)
Générateur principal infini en Python3
La loi des nombres en python
[Python] nCr mod Calculer les nombres premiers
Projet Euler # 3 "Maximum Prime Factors" en Python
Trouver des fichiers comme Linux Find en Python
Ecrire une courte définition de propriété en Python
Projet Euler # 7 "1000 1er nombre premier" en Python
Rechercher et vérifier la matrice inverse en Python
Trouver un automate de produit direct (fini déterministe) en Python
Projet Euler # 2 "Even Fibonacci Number" en Python
J'ai essayé d'implémenter le tri par fusion en Python avec le moins de lignes possible
Techniques souvent utilisées dans le codage court en python (Bloc-notes)
AtCoder: Python: Automatisez autant que possible les tests d'échantillons.
Énumération des nombres premiers et jugement des nombres premiers en Python
Implémentation minimale d'Union Find en Python
Découvrez la fraction de la valeur saisie en python
Décomposition en facteurs premiers ver.1 des entiers entrés en Python
Trouvez la solution de l'équation d'ordre n avec python
Pratique de l'héritage de classe en python comme vu dans sklearn
Projet Euler # 13 "Somme des grands nombres" en Python
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
Décomposition en facteurs premiers ver.2 des entiers entrés en Python
Comment générer "Ketsumaimo" en standard en Python
Utiliser python dans le conteneur Docker comme interpréteur Pycharm
[Python] Trouvez la matrice de translocation en notation d'inclusion
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python