Nombre premier en Python

Il peut être étonnamment difficile de trouver un nombre premier et de le diviser par le nombre premier ... Comment faites-vous cela avec Python?

Quand j'ai vu le gif du [tamis d'Eratostenes](https://ja.wikipedia.org/wiki/Eratostenes's tamis) sur Wikipédia, j'ai pensé qu'il serait possible de le faire, alors j'ai essayé. Par exemple? Avec la liaison lambda.


do = lambda *x : x
switch = lambda x : x[-1]


primes = (
  lambda n : find_primes( range( 2, n + 1 ), ( n + 1 ) ** 0.5, [ ] )
)

find_primes = (
  lambda xs, end_point, ys :
    
    switch(
      xs[0] <= end_point and do( ys.append( xs[0] )
              				, find_primes( remove_fst_multiples( xs ) , end_point, ys )
            				)
      
      or   					do( ys.extend( xs ) 
              				, ys 
            				)
    )
)

remove_fst_multiples = (
  lambda xs : [ x for x in xs if x % xs[0]  ]
)

print primes(100)

Résultat de l'exécution:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

L'algorithme est le même que Wikipedia.

nombres premiers est une fonction qui transmet simplement les valeurs d'une manière agréable. L'entité est find_primes.

find_primes est

remove_fst_multiples prend une liste et retourne une liste excluant les multiples de la première valeur de la liste.

Essayez d'utiliser itertools

J'ai reçu un commentaire alors j'ai essayé de l'utiliser. Cependant, je ne sais pas ce que c'est, alors je l'ai googlé et j'ai remplacé la liste de recherche par un itérateur pour le moment. Veuillez consulter les commentaires et autres annonces pour savoir comment l'utiliser correctement.

from itertools import count, ifilter, takewhile

do = lambda *x : x
switch = lambda x : x[-1]


primes = ( lambda n : 
  find_primes( 
    takewhile(lambda x : x < n + 1, count(2))
  , ( n + 1 ) ** 0.5
  , [ ] 
  )
)

find_primes = (
  lambda xs, end_point, ys :
    (lambda a = next( xs ) :
      
      switch(
       a <= end_point and do( ys.append( a )
               			, find_primes( remove_multiples( xs, a ) , end_point, ys )
              			)
        
        or   			do( ys.append( a )
                		, ys.extend(list( xs) ) 
               			, ys 
             			)
      )
    )()
)

remove_multiples = (
  lambda xs, a : ifilter(lambda x : x % a , xs )
)

print primes(100)

Recommended Posts

Nombre premier en Python
Premier nombre 2 en Python
J'ai cherché un nombre premier avec python
Projet Euler # 10 "somme des nombres premiers" en Python
Juger les nombres premiers avec python
Trouvez des nombres premiers avec un code aussi court que possible en Python
Gérer les nombres complexes en Python
Gérer les nombres premiers avec Python / Ruby / PHP / Golang (Go)
Tester avec des nombres aléatoires en Python
Générateur principal infini en Python3
La loi des nombres en python
[Python] nCr mod Calculer les nombres premiers
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Projet Euler # 3 "Maximum Prime Factors" en Python
Projet Euler # 7 "1000 1er nombre premier" en Python
Projet Euler # 2 "Even Fibonacci Number" en Python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python