Haskell - 77/ 108 107 Chars
kullanımı: her iki çözümde de, a + bi'nin bir gauss asalı olup olmadığı konusunda% b yazmak döndürülür.
yönettiğim en düşük, ancak yaratıcılık veya performans yok (77 karakter)
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
bu çözüm sadece asal olup olmadığını kontrol etmek için n altındaki tüm sayılara güç sağlar.
ungolfed sürümü:
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)
bir sonraki çözümün ekstra bir özelliği var - notlandırma. bir n tamsayısının asal olup olmadığını kontrol ettikten sonra, n'ye eşit veya n'den küçük olan tüm sayıların "öncelikliliğini" yeniden hesaplamanıza gerek yoktur, çünkü bilgisayarda saklanacaktır.
(107 karakter. Yorumlar netlik içindir)
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 sürümü:
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)
bu, tüm primerlerin sonsuz bir listesini hesaplamak için Eratosthenes elekini kullanır (koddaki liste için l olarak adlandırılır). (sonsuz listeler, iyi bilinen bir haskell numarasıdır).
Sonsuz bir listeye sahip olmak nasıl mümkün olabilir? programın başında, liste değerlendirilmemiştir ve listeler öğelerini depolamak yerine, bilgisayar bunları hesaplamanın yolunu saklar. ancak program listeye eriştikçe, isteğe göre kendisini kısmen değerlendirir. bu nedenle, program listedeki dördüncü öğeyi isteyecek olsaydı, bilgisayar daha önce değerlendirilmemiş olan tüm ilkleri hesaplar, saklar ve geri kalanı değerlendirilmeden kalır, bir kez hesaplamanın yolu olarak saklanır gerekli.
bunların hepsinin Haskell dilinin tembel doğası tarafından özgürce verildiğini, bunların hiçbirinin kodun kendisinden belirgin olmadığını unutmayın.
programın her iki sürümü de aşırı yüklenmiştir, böylece keyfi boyuttaki verileri işleyebilirler.
factor
Bashmf
vemF
CJam, ...)