Haskell ทั้งหมด - 77/ 108 107 ตัวอักษร
การใช้งาน: ในทั้งสองวิธีการพิมพ์ a% b จะกลับมาว่า + bi เป็น gaussian prime หรือไม่
ต่ำสุดที่ฉันจัดการ แต่ไม่มีความคิดสร้างสรรค์หรือประสิทธิภาพ (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)
นี่ใช้ตะแกรงของ Eratosthenes เพื่อคำนวณรายการอนันต์ของช่วงเวลาทั้งหมด (เรียกว่า l สำหรับรายการในโค้ด) (รายการไม่มีที่สิ้นสุดเป็นเคล็ดลับที่รู้จักกันดีของฮาเซล)
เป็นไปได้อย่างไรที่จะมีรายการไม่สิ้นสุด เมื่อเริ่มต้นโปรแกรมรายการจะถูกประเมินค่าและแทนที่จะจัดเก็บองค์ประกอบรายการคอมพิวเตอร์จะจัดเก็บวิธีการคำนวณ แต่เมื่อโปรแกรมเข้าถึงรายการมันจะประเมินตัวเองตามคำร้องขอเพียงบางส่วน ดังนั้นหากโปรแกรมต้องการขอรายการที่สี่ในรายการคอมพิวเตอร์จะคำนวณช่วงเวลาทั้งหมดที่ไม่ได้รับการประเมินเก็บไว้และส่วนที่เหลือจะไม่มีการประเมินค่าจัดเก็บเป็นวิธีการคำนวณครั้งเดียว จำเป็น
โปรดทราบว่าทั้งหมดนี้มอบให้โดยอิสระโดยธรรมชาติที่ขี้เกียจของภาษา Haskell ไม่มีสิ่งใดที่ชัดเจนจากรหัส
โปรแกรมทั้งสองเวอร์ชันมีการใช้งานมากเกินไปดังนั้นจึงสามารถจัดการกับข้อมูลที่มีขนาดตามอำเภอใจได้
factor
ใน Bashmf
และmF
ใน CJam, ... )