Hal yang perlu diketahui:
Pertama, angka keberuntungan.
Angka keberuntungan dihasilkan seperti ini:
Ambil semua bilangan asli:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20...
Kemudian, hapus setiap angka kedua.
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39...
Sekarang 3
aman.
Hapus setiap nomor ke-3:
1, 3, 7, 9, 13, 15, 19, 21, 25, 27, 31, 33, 37, 39, 43, 45, 49, 51, 55, 59...
Sekarang 7
aman.
Hapus setiap nomor 7.
Lanjutkan, dan hapus setiap n
nomor, di mana n
nomor aman pertama setelah eliminasi.
Daftar akhir nomor aman adalah angka keberuntungan.
Angka-angka sial terdiri dari daftar angka yang terpisah, yaitu [U1, U2, U3... Un]
.
U1
adalah set angka pertama yang dihapus dari "kandidat" yang beruntung, jadi mereka adalah:
2, 4, 6, 8, 10, 12, 14, 16, 18, 20...
U2
adalah set angka kedua yang dihapus:
5, 11, 17, 23, 29, 35, 41, 47, 53, 59...
Dan seterusnya dan seterusnya ( U3
adalah daftar ketiga, U4
adalah yang keempat, dll.)
Tantangan:
Tugas Anda adalah, ketika diberi dua input m
dan n
, menghasilkan m
nomor ke-10 dalam daftar Un
.
Contoh input dan output:
(5, 2) -> 29
(10, 1) -> 20
Spesifikasi:
- Program Anda harus bekerja
m
hingga1e6
, dann
hingga100
.- Anda dijamin keduanya
m
dann
bilangan bulat positif. - Jika Anda penasaran,
U(1e6, 100)
=5,333,213,163
. (Terima kasih @pacholik!)
- Anda dijamin keduanya
- Program Anda harus menghitungnya dalam 1 hari di komputer modern yang masuk akal.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
PS: Alangkah baiknya jika seseorang membuat formula umum untuk menghasilkan ini. Jika Anda memiliki formula, harap cantumkan jawaban Anda!
(1e6,1e6)
?
n=1
kasus ini? Karena ini spesial - untuk semua kasus lainnya, indeks berbasis 0 dari angka keberuntungan berikutnya adalah n-1
.