Các thách thức
Thực hiện sàng Sundaram để tìm số nguyên tố dưới đây n. Lấy một số nguyên đầu vào nvà xuất các số nguyên tố bên dưới n. Bạn có thể cho rằng nsẽ luôn nhỏ hơn hoặc bằng một triệu.
Sàng
Bắt đầu với một danh sách các số nguyên từ
1đếnn.Xóa tất cả các số có dạng
i + j + 2ij:ivàjít hơnn.jluôn luôn lớn hơn hoặc bằngi, lớn hơn hoặc bằng1.
i + j + 2ijnhỏ hơn hoặc bằngn
Nhân các số còn lại với
2và thêm1.
Điều này sẽ mang lại tất cả các số nguyên tố (ngoại trừ 2, nên được bao gồm trong đầu ra của bạn) ít hơn 2n + 2.
Dưới đây là một hình ảnh động của sàng được sử dụng để tìm các số nguyên tố dưới đây 202.

Đầu ra
Đầu ra của bạn phải là mọi số nguyên tố ≤ n(theo thứ tự tăng dần) theo sau là một dòng mới:
2
3
5
Trong trường hợp nlà 5.
Ví dụ
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
Đầu vào được ký hiệu là >.
(i,j)với i<=j, nhưng kết quả không thay đổi nếu chúng tôi bỏ qua yêu cầu này. Chúng ta có thể làm như vậy để tiết kiệm byte?
i <= j. Nó chỉ là một phần trong cách thức hoạt động của sàng. Vì vậy, có, bạn có thể để lại i <= jtrong mã của bạn. @xnor
2n+1) không phải là dạng 2(i + j + 2ij)+1- chúng ta có thể kiểm tra tính chất này trực tiếp trên các số nguyên tố tiềm năng hay mã của chúng ta phải thực hiện lần 2 cộng 1 ?
ntrong toàn bộ. Trong mô tả phương thức, nó nói rằng nó sẽ tạo ra tất cả các số nguyên tố lên đến 2 * n + 2. Nhưng trong mô tả đầu vào / đầu ra, nó nói rằng đầu vào là nvà đầu ra tất cả các số nguyên tố lên đến n. Vì vậy, chúng ta có nên áp dụng phương pháp để tạo ra tất cả các số nguyên tố 2 * n + 2, và sau đó thả các số lớn hơn ncho đầu ra không? Hoặc chúng ta nên tính toán ntrong mô tả phương pháp từ đầu vào n?
n=30bị thiếu 29 trong đầu ra.