Haskell - 77/108 107 Zeichen
Verwendung: In beiden Lösungen gibt die Eingabe von a% b zurück, ob a + bi eine Gaußsche Primzahl ist.
das niedrigste, das ich geschafft habe, aber keine Kreativität oder Leistung (77 Zeichen)
p n=all(\x->rem n x>0)[2..n-1]
a%0=rem a 4==3&&p(abs a)
0%a=a%0
a%b=p$a^2+b^2
Diese Lösung durchläuft nur alle Zahlen unter n, um zu prüfen, ob es sich um eine Primzahl handelt.
ungolfed version:
isprime = all (\x -> rem n x != 0) [2..n-1] -- none of the numbers between 2 and n-1 divide n.
isGaussianPrime a 0 = rem a 4==3 && isprime (abs a)
isGaussianPrime 0 a = isGaussianPrime a 0 -- the definition is symmetric
isGaussianPrime a b = isprime (a^2 + b^2)
Die nächste Lösung hat eine zusätzliche Funktion - Memoization. Wenn Sie überprüft haben, ob eine Ganzzahl n eine Primzahl ist, müssen Sie die "Primzahl" aller Zahlen, die kleiner oder gleich n sind, nicht neu berechnen, da sie im Computer gespeichert werden.
(107 Zeichen. Die Kommentare dienen der Klarheit.)
s(p:x)=p:s[n|n<-x,rem n p>0] --the sieve function
l=s[2..] --infinite list of primes
p n=n==filter(>=n)l!!0 --check whether n is in the list of primes
a%0=rem a 4==3&&p(abs a)
0%a=a%0
a%b=p$a*a+b*b
ungolfed version:
primes = sieve [2..] where
sieve (p:xs) = p:filter (\n -> rem n p /= 0) xs
isprime n = n == head (filter (>=n) primes) -- checks if the first prime >= n is equal to n. if it is, n is prime.
isGaussianPrime a 0 = rem a 4==3 && isprime (abs a)
isGaussianPrime 0 a = isGaussianPrime a 0 -- the definition is symmetric
isGaussianPrime a b = isprime (a^2 + b^2)
Dabei wird das Sieb von Eratosthenes verwendet, um eine unendliche Liste aller Primzahlen zu berechnen (im Code als l für Liste bezeichnet). (Unendliche Listen sind ein bekannter Trick von Haskell).
Wie ist es möglich, eine unendliche Liste zu haben? Zu Beginn des Programms wird die Liste nicht ausgewertet. Statt die Listenelemente zu speichern, speichert der Computer die Berechnungsmethode. Wenn das Programm jedoch auf die Liste zugreift, wertet es sich teilweise selbst bis zur Anforderung aus. Wenn das Programm also das vierte Element in der Liste anfordert, berechnet der Computer alle Primzahlen bis zum vierten Element, die noch nicht ausgewertet wurden, speichert sie, und der Rest bleibt unbewertet und wird als Berechnungsmethode einmal gespeichert erforderlich.
Beachten Sie, dass all dies durch die Trägheit der Haskell-Sprache frei gegeben ist, nichts davon geht aus dem Code selbst hervor.
Beide Programmversionen sind überlastet, sodass sie Daten beliebiger Größe verarbeiten können.
factor
in Bashmf
undmF
in CJam, ...)