Haskell - 77/ 108 107 Karakter
penggunaan: di kedua solusi, mengetikkan% b akan mengembalikan apakah + bi adalah prime gaussian.
terendah yang saya kelola, tetapi tidak ada kreativitas atau kinerja (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
solusi ini hanya menjalankan semua angka di bawah n untuk memeriksa apakah itu prima.
versi tanpa ungolfed:
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)
solusi berikutnya memiliki fitur tambahan - memoisasi. setelah Anda memeriksa apakah bilangan bulat n adalah bilangan prima, Anda tidak perlu menghitung ulang "nilai" semua angka yang lebih kecil dari atau sama dengan n, karena bilangan itu akan disimpan di komputer.
(107 karakter. Komentar untuk kejelasan)
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
versi tanpa ungolfed:
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)
ini menggunakan saringan Eratosthenes untuk menghitung daftar tak terbatas dari semua bilangan prima (disebut l untuk daftar dalam kode). (Daftar infinite adalah trik haskell yang terkenal).
bagaimana mungkin memiliki daftar yang tidak terbatas? pada awal program, daftar tidak dievaluasi, dan alih-alih menyimpan elemen daftar, komputer menyimpan cara untuk menghitungnya. tetapi ketika program mengakses daftar itu sebagian mengevaluasi sendiri hingga permintaan. jadi, jika program meminta item keempat dalam daftar, komputer akan menghitung semua bilangan prima hingga sebagainya yang belum dievaluasi, menyimpannya, dan sisanya akan tetap tidak dievaluasi, disimpan sebagai cara untuk menghitungnya sekali dibutuhkan.
perhatikan bahwa semua ini diberikan secara bebas oleh sifat malas bahasa Haskell, tidak ada yang terlihat dari kode itu sendiri.
kedua versi program kelebihan beban, sehingga mereka dapat menangani data berukuran sewenang-wenang.
factor
di Bash,mf
danmF
di CJam, ...)