Đối với thư viện, tôi cần lưu trữ số nguyên tố đầu tiên lên đến giới hạn L. Bộ sưu tập này phải có thời gian tra cứu O (1) (để kiểm tra xem số có là số nguyên tố hay không) và nó phải dễ dàng, được đưa ra một số, để tìm số nguyên tố tiếp theo (giả sử nó nhỏ hơn L).Lưu trữ hiệu quả các số nguyên tố
Cho rằng L là cố định, một sàng Eratostene để tạo danh sách là tốt. Ngay bây giờ, tôi sử dụng một mảng boolean đóng gói để lưu trữ danh sách, trong đó chỉ chứa các mục cho các số lẻ giữa 3 và L (bao gồm). Điều này có (L-2)/2 bit bộ nhớ. Tôi muốn có thể tăng L mà không cần sử dụng nhiều bộ nhớ hơn.
Có cấu trúc dữ liệu nào sử dụng ít bộ nhớ hơn với các thuộc tính tương tự không? Hoặc với ít nhất là thời gian tra cứu liên tục? (Số lẻ sau đó có thể được liệt kê cho đến khi chúng tôi có được một số nguyên tố)
(ngôn ngữ tôi đã viết trong này là Factor nhưng câu hỏi này sẽ là như nhau trong bất kỳ ngôn ngữ mà đã tích hợp sẵn hoặc dễ dàng lập trình mảng chút đóng gói)
Điển hình 'L' là gì? Đây có phải là cho một thiết bị nhúng nơi bộ nhớ là chặt chẽ? Nó có thể ảnh hưởng đến các khuyến nghị. Cho rằng có 50.847.534 số nguyên tố dưới một tỷ, bạn có thể dành nhiều thời gian đóng gói/giải nén sau đó một mảng thẳng về phía trước của số nguyên 4 byte. –
L vào ngày hôm nay là 5.000.000. –
Và tôi sẽ không muốn nhiều hơn ~ 320kB bộ nhớ tôi có ngày hôm nay. –