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 n
và xuất các số nguyên tố bên dưới n
. Bạn có thể cho rằng n
sẽ 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
:i
vàj
ít hơnn
.j
luôn luôn lớn hơn hoặc bằngi
, lớn hơn hoặc bằng1
.i + j + 2ij
nhỏ hơn hoặc bằngn
Nhân các số còn lại với
2
và 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 n
là 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 <= j
trong 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 ?
n
trong 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à n
và đầ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 n
cho đầu ra không? Hoặc chúng ta nên tính toán n
trong mô tả phương pháp từ đầu vào n
?
n=30
bị thiếu 29 trong đầu ra.