[GO] Primzahl in Python

Es kann überraschend schwierig sein, eine Primzahl zu finden und durch die Primzahl zu teilen ... Wie machst du das mit Python?

Als ich das GIF von [Eratostenes 'Sieb](https://ja.wikipedia.org/wiki/Eratostenes' Sieb) auf Wikipedia sah, dachte ich, dass dies möglich wäre, also versuchte ich es. Zum Beispiel? Mit Lambda-Bindung.


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)

Ausführungsergebnis:

[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]

Der Algorithmus ist der gleiche wie bei Wikipedia.

Primzahlen sind eine Funktion, die Werte nur auf nette Weise übergibt. Die Entität ist find_primes.

find_primes ist

remove_fst_multiples nimmt eine Liste und gibt eine Liste ohne Vielfache des ersten Werts der Liste zurück.

Versuchen Sie es mit itertools

Ich habe einen Kommentar erhalten und versucht, ihn zu verwenden. Ich weiß jedoch nicht, was es ist, also habe ich es gegoogelt und die Suchliste vorerst durch einen Iterator ersetzt. Bitte beachten Sie die Kommentare und andere Ankündigungen zur ordnungsgemäßen Verwendung.

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

Primzahl in Python
Primzahl 2 in Python
Ich habe mit Python nach einer Primzahl gesucht
Projekt Euler # 10 "Summe der Primzahlen" in Python
Beurteilung von Primzahlen mit Python
Finden Sie in Python Primzahlen mit einem möglichst kurzen Code
Behandeln Sie komplexe Zahlen in Python
Behandle Primzahlen mit Python / Ruby / PHP / Golang (Go)
Testen mit Zufallszahlen in Python
Unendlicher Primgenerator in Python3
Das Gesetz der Zahlen in Python
[Python] nCr mod Primzahlen berechnen
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Projekt Euler # 7 "1000 1. Primzahl" in Python
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python