Bestimmen, ob eine gegebene Zahl eine Primzahl in Haskell ist

7

Also habe ich die folgende Funktion entwickelt, um zu sehen, ob eine gegebene Zahl eine Primzahl in Haskell ist (sie nimmt an, dass die erste Primzahl 2 ist):

%Vor%

es hat den offensichtlichen Fehler, die Auswertung fortzusetzen, selbst wenn es durch mehrere Zahlen teilbar ist :(. Gibt es eine gesunde Möglichkeit, die Auswertung zu "schneiden", wenn mehr als eine Lösung gefunden wird list comprehensions?

Welche anderen Implementierungen würden Sie auch anprobieren? Ich bin nicht auf der Suche nach Leistung hier, ich versuche nur zu sehen, ob es andere "haskellische" Wege gibt, dasselbe zu tun.

    
devoured elysium 14.01.2011, 11:54
quelle

5 Antworten

16

Eine schnelle Änderung an Ihrem Code, die die Auswertung "kurzschließt" und auf der Faulheit der Haskell-Listen beruht, ist:

%Vor%

Der erste Divisor von k bewirkt, dass die Liste nicht leer ist und die Haskell-Implementierung von null wird nur auf das erste Element der Liste schauen.

Sie sollten nur bis zu sqrt (k) jedoch [1]:

überprüfen %Vor%

Wenn Sie einen leistungsstarken Primzahltest durchführen möchten, ist eine Bibliothek bevorzugt.

[1] Ссылка

    
tildedave 14.01.2011 19:19
quelle
8

Hier ist die beste Ressource für Primzahlen in Haskell in haskell.org

und hier prime.hs github-Projekt

    
user467871 14.01.2011 12:07
quelle
6

Das ist vielleicht nicht direkt relevant, aber zum Thema Primzahlen in funktionalen Sprachen fand ich Melissa E. O'Neills Das echte Sieb von Eratosthenes ist sehr interessant.

    
gspr 14.01.2011 12:00
quelle
4

Ignoriere das Primes-Problem und konzentriere dich auf den engen Punkt einer effizienteren Methode von length xs == n :

%Vor%     
dave4420 14.01.2011 12:34
quelle
2

Ich mag diesen Ansatz:

Machen Sie zuerst die Funktion, um alle Faktoren von n zu erhalten:

%Vor%

Überprüfen Sie dann, ob die Faktoren nur die angegebene Zahl und 1 sind, wenn dies der Fall ist, ist die Zahl prim:

%Vor%     
notgiorgi 09.05.2016 18:46
quelle

Tags und Links