Tantangan
Terapkan saringan Sundaram untuk menemukan bilangan prima di bawah ini n. Ambil integer input n,, dan output bilangan prima di bawah ini n. Anda dapat mengasumsikan bahwa nakan selalu kurang dari atau sama dengan satu juta.
Saringan
Mulai dengan daftar bilangan bulat dari
1hinggan.Hapus semua angka yang ada di formulir di
i + j + 2ijmana:idanjkurang darin.jselalu lebih besar atau sama dengani, yang lebih besar dari atau sama dengan1.
i + j + 2ijkurang dari atau sama dengann
Lipat gandakan angka yang tersisa dengan
2, dan tambahkan1.
Ini akan menghasilkan semua bilangan prima (kecuali 2, yang harus dimasukkan dalam output Anda) kurang dari 2n + 2.
Berikut ini adalah animasi dari saringan yang digunakan untuk menemukan bilangan prima di bawah ini 202.

Keluaran
Output Anda harus setiap bilangan bulat utama ≤ n(dalam urutan menaik) diikuti oleh baris baru:
2
3
5
Dimana nadalah 5.
Contohnya
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
Input dilambangkan dengan >.
(i,j)dengan i<=j, tetapi hasilnya tidak berubah jika kami mengabaikan persyaratan ini. Bisakah kita melakukannya untuk menghemat byte?
i <= j. Itu hanya bagian dari cara kerja ayakan. Jadi ya, Anda dapat meninggalkan i <= jkode Anda. @xnor
2n+1) yang bukan dari bentuk 2(i + j + 2ij)+1- dapatkah kita menguji properti ini langsung pada bilangan potensial atau apakah kode kita harus melakukan kali 2 ditambah 1 pada beberapa titik ?
nada di semuanya. Dalam deskripsi metode, dikatakan bahwa itu akan menghasilkan semua bilangan prima hingga 2 * n + 2. Tetapi dalam uraian input / output, dikatakan bahwa inputnya adalah n, dan outputnya semuanya siap n. Jadi apakah kita harus menerapkan metode untuk menghasilkan semua bilangan prima hingga 2 * n + 2, dan kemudian drop yang lebih besar daripada nuntuk output? Atau haruskah kita menghitung ndeskripsi metode dalam dari input n?
n=3029 tidak ada dalam output.