Đây là an algorithm được xây dựng trên bản đồ và giảm (folding). Nó thể hiện sieve of Eratosthenes
P = {3,5,7, ...} \ U {{p , p + 2p, p + 4p, ...} | p trong P}
cho số nguyên tố lẻ (nghĩa là không có 2). Gấp được vô hạn định sâu sắc về bên phải, như thế này:
trong đó mỗi số nguyên tố đánh dấu một dòng bội lẻ của nguyên tố đó, ví dụ cho : 49, 49 + 14, 49 + 28, ..., tất cả được kết hợp để có được tất cả các hợp số, và sau đó số nguyên tố được tìm thấyvào những khoảng trống giữa hợp số. Đó là trong Haskell, do đó, thời gian được xử lý hoàn toàn bởi cơ chế đánh giá lười biếng (và điều chỉnh thuật toán trong đó mỗi nút so sánh luôn cho phép thông qua số đầu tiên từ bên trái mà không yêu cầu số từ bên phải, bởi vì nó là đảm bảo lớn hơn).
Tỷ lệ có thể được sử dụng thay cho số nguyên tố lẻ làm hạt cho thế hệ bội số, để đơn giản hóa mọi thứ (với ý nghĩa hiệu suất rõ ràng).
Công việc có thể được chia thành các phân đoạn giữa các ô số nguyên tố liên tiếp.Haskell đang sau, nhưng chúng ta có thể coi đó là một giả thực thi quá (nơi :
là danh sách nút constructor lười biếng, một cuộc gọi chức năng f(x)
được viết f x
, và dấu ngoặc đơn được sử dụng để chỉ nhóm):
primes() = 2 : ([3,5..] `minus` unionAll [[p*p, p*p+2*p..] | p <- prs])
where
prs = 3 : ([5,7..] `minus` unionAll [[p*p, p*p+2*p..] | p <- prs])
unionAll ((x:xs):t) = x : union xs (unionAll (pairs t))
pairs ((x:xs):ys:t) = (x : union xs ys) : pairs t
union (x:xs) (y:ys) = case compare x y of
LT -> x : union xs (y:ys)
EQ -> x : union xs ys
GT -> y : union (x:xs) ys
minus (x:xs) (y:ys) = case compare x y of
LT -> x : minus xs (y:ys)
EQ -> minus xs ys
GT -> minus (x:xs) ys
Cuộc thảo luận là here. Phức tạp hơn, lập lịch lazer là here. Đồng thời this SO answer hiển thị bản dịch gần đúng của mã Haskell (liên quan) về máy phát điện.
xem http://www.mersenne.org và http://en.wikipedia.org/wiki/Great_Internet_Mersenne_Prime_Search, cũng có một nhóm người Trung Quốc tìm thấy số nguyên tố rất lớn và tôi khá chắc chắn rằng cả hai sẽ có một thuật toán song song khá (MPI/Phân phối) để làm như vậy – pyCthon