हास्केल - 77/ 108 107 वर्ण
उपयोग: दोनों समाधानों में,% b टाइप करने पर वापस आ जाएगा कि क्या a + bi एक गॉसियन प्राइम है।
सबसे कम मैं कामयाब रहा, लेकिन कोई रचनात्मकता या प्रदर्शन (77 वर्ण)
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
यदि यह प्रधान है, तो यह समाधान 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)
अगले समाधान में एक अतिरिक्त विशेषता है - संस्मरण। एक बार जब आप जाँचते हैं कि कुछ पूर्णांक n अभाज्य है, तो आपको सभी संख्याओं की "प्रधानता" को पुनर्गठित करने की आवश्यकता नहीं होगी, क्योंकि यह कंप्यूटर में संग्रहीत या n के बराबर होगी।
(107 वर्ण, टिप्पणियाँ स्पष्टता के लिए हैं)
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
अपंग संस्करण:
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)
यह सभी अपराधों की एक अनंत सूची (कोड में सूची के लिए एल) की गणना करने के लिए एराटोस्थनीज की छलनी का उपयोग करता है। (अनंत सूचियाँ हैसेल की एक जानी-मानी चाल है)।
अनंत सूची होना कैसे संभव है? कार्यक्रम की शुरुआत में, सूची का मूल्यांकन नहीं किया जाता है, और सूची तत्वों को संग्रहीत करने के बजाय, कंप्यूटर उन्हें संकलित करने का तरीका संग्रहीत करता है। लेकिन जैसा कि कार्यक्रम सूची तक पहुँचता है यह आंशिक रूप से अनुरोध तक ही मूल्यांकन करता है। इसलिए, यदि प्रोग्राम सूची में चौथे आइटम का अनुरोध करने के लिए था, तो कंप्यूटर सभी प्राइमों को आगे तक गणना करेगा जो पहले से ही मूल्यांकन नहीं किए गए हैं, उन्हें स्टोर करें, और बाकी अनवैल्यूड रहेंगे, उन्हें एक बार गणना करने के तरीके के रूप में संग्रहीत किया जाएगा। जरूरत है।
ध्यान दें कि यह सब हास्केल भाषा के आलसी स्वभाव द्वारा स्वतंत्र रूप से दिया गया है, इनमें से कोई भी कोड से स्पष्ट नहीं है।
कार्यक्रम के दोनों संस्करण अतिभारित हैं, इसलिए वे मनमाने ढंग से डेटा को संभाल सकते हैं।
factor
बैश में,mf
औरmF
सीजाम में, ...) का उपयोग करने की अनुमति है