สิ่งที่ควรรู้:
ก่อนอื่นหมายเลขนำโชค
หมายเลขที่โชคดีถูกสร้างขึ้นเช่น:
รับหมายเลขธรรมชาติทั้งหมด:
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, สร้างจำนวนวันในรายการmUn
ตัวอย่างอินพุตและเอาต์พุต:
(5, 2) -> 29
(10, 1) -> 20
รายละเอียด:
- การทำงานของโปรแกรมต้องของคุณสำหรับการ
mขึ้นไป1e6และขึ้นไปn100- คุณรับประกันได้ว่าทั้งสอง
mและnเป็นจำนวนเต็มบวก U(1e6, 100)หากคุณอยากรู้อยากเห็น5,333,213,163= (ขอบคุณ @pacholik!)
- คุณรับประกันได้ว่าทั้งสอง
- โปรแกรมของคุณต้องคำนวณว่าภายใน 1 วันบนคอมพิวเตอร์ที่ทันสมัยพอสมควร
นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!
PS: มันจะดีถ้ามีคนคิดสูตรทั่วไปสำหรับสร้างสิ่งเหล่านี้ หากคุณมีสูตรโปรดใส่ไว้ในคำตอบของคุณ!
(1e6,1e6)หรือไม่?
n=1กรณี? เช่นนี้เป็น special-- สำหรับกรณีอื่น ๆ ทั้งหมดที่ดัชนี 0 n-1ตามจำนวนโชคดีต่อไปคือ