สิ่งที่ควรรู้:
ก่อนอื่นหมายเลขนำโชค
หมายเลขที่โชคดีถูกสร้างขึ้นเช่น:
รับหมายเลขธรรมชาติทั้งหมด:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20...
จากนั้นลบแต่ละหมายเลขที่สอง
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39...
ตอนนี้3
ปลอดภัยแล้ว
ลบทุกหมายเลขที่ 3:
1, 3, 7, 9, 13, 15, 19, 21, 25, 27, 31, 33, 37, 39, 43, 45, 49, 51, 55, 59...
ตอนนี้7
ปลอดภัยแล้ว
ลบทุกหมายเลขที่ 7
ดำเนินการต่อและลบทุกn
หมายเลขที่ซึ่งn
เป็นหมายเลขที่ปลอดภัยแรกหลังจากการกำจัด
รายการสุดท้ายของหมายเลขที่ปลอดภัยคือหมายเลขนำโชค
[U1, U2, U3... Un]
หมายเลขโชคร้ายประกอบด้วยรายการแยกต่างหากของตัวเลขซึ่งเป็น
U1
เป็นตัวเลขชุดแรกที่ถูกลบออกจาก "ผู้สมัคร" ที่โชคดีดังนั้นจึงเป็น:
2, 4, 6, 8, 10, 12, 14, 16, 18, 20...
U2
เป็นการลบหมายเลขชุดที่สอง:
5, 11, 17, 23, 29, 35, 41, 47, 53, 59...
และต่อ ๆ ไปเรื่อย ๆ ( U3
เป็นรายการที่สามU4
คือที่สี่เป็นต้น)
ท้าทาย:
งานของคุณคือเมื่อได้รับสองอินพุตm
และn
, สร้างจำนวนวันในรายการm
Un
ตัวอย่างอินพุตและเอาต์พุต:
(5, 2) -> 29
(10, 1) -> 20
รายละเอียด:
- การทำงานของโปรแกรมต้องของคุณสำหรับการ
m
ขึ้นไป1e6
และขึ้นไปn
100
- คุณรับประกันได้ว่าทั้งสอง
m
และn
เป็นจำนวนเต็มบวก U(1e6, 100)
หากคุณอยากรู้อยากเห็น5,333,213,163
= (ขอบคุณ @pacholik!)
- คุณรับประกันได้ว่าทั้งสอง
- โปรแกรมของคุณต้องคำนวณว่าภายใน 1 วันบนคอมพิวเตอร์ที่ทันสมัยพอสมควร
นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!
PS: มันจะดีถ้ามีคนคิดสูตรทั่วไปสำหรับสร้างสิ่งเหล่านี้ หากคุณมีสูตรโปรดใส่ไว้ในคำตอบของคุณ!
(1e6,1e6)
หรือไม่?
n=1
กรณี? เช่นนี้เป็น special-- สำหรับกรณีอื่น ๆ ทั้งหมดที่ดัชนี 0 n-1
ตามจำนวนโชคดีต่อไปคือ