Haskell - 77/ 108 107 Chars
cách sử dụng: trong cả hai giải pháp, gõ% b sẽ trả về việc a + bi có phải là số nguyên tố gaussian hay không.
thấp nhất tôi quản lý, nhưng không có sáng tạo hoặc hiệu suất (77 ký tự)
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
giải pháp này chỉ cấp nguồn qua tất cả các số dưới n để kiểm tra xem nó có phải là số nguyên tố hay không.
phiên bản không có bản quyền:
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)
giải pháp tiếp theo có một tính năng bổ sung - ghi nhớ. một khi bạn kiểm tra xem một số nguyên n có phải là số nguyên tố hay không, bạn sẽ không cần tính toán lại "độ nguyên thủy" của tất cả các số nhỏ hơn hoặc bằng n, vì nó sẽ được lưu trong máy tính.
(107 ký tự. Các ý kiến là rõ ràng)
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
phiên bản không có bản quyền:
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)
cái này sử dụng sàng của Eratosthenes để tính toán một danh sách vô hạn của tất cả các số nguyên tố (được gọi là l cho danh sách trong mã). (danh sách vô hạn là một thủ thuật nổi tiếng của haskell).
làm thế nào có thể có một danh sách vô hạn? khi bắt đầu chương trình, danh sách này không được đánh giá và thay vì lưu trữ các phần tử danh sách, máy tính sẽ lưu trữ cách tính toán chúng. nhưng khi chương trình truy cập vào danh sách, nó sẽ tự đánh giá một phần theo yêu cầu. vì vậy, nếu chương trình yêu cầu mục thứ tư trong danh sách, máy tính sẽ tính tất cả các số nguyên tố cho đến khi chưa được đánh giá, lưu trữ chúng và phần còn lại sẽ không được đánh giá, được lưu trữ như một cách để tính toán chúng một lần cần thiết
lưu ý rằng tất cả những điều này được đưa ra một cách tự do bởi bản chất lười biếng của ngôn ngữ Haskell, không có gì trong số đó là rõ ràng từ chính mã.
cả hai phiên bản của chương trình đều bị quá tải, vì vậy chúng có thể xử lý dữ liệu có kích thước tùy ý.
factor
trong Bashmf
vàmF
trong CJam, ...)