พื้นหลัง
สกุลเงินอย่างเป็นทางการของประเทศจินตนาการของ Golfenistan คือฟูและมีเหรียญสามชนิดหมุนเวียน: 3 foos, 7 foos และ 8 foos จะเห็นได้ว่าเป็นไปไม่ได้ที่จะจ่ายเงินจำนวนหนึ่งเช่น 4 foos โดยใช้เหรียญเหล่านี้ อย่างไรก็ตามสามารถสร้างจำนวนมากพอทั้งหมด งานของคุณคือการหาจำนวนเงินที่ใหญ่ที่สุดที่ไม่สามารถเกิดขึ้นกับเหรียญ (5 Foos ในกรณีนี้) ซึ่งเป็นที่รู้จักกันเป็นปัญหาเหรียญ
อินพุต
ข้อมูลที่คุณป้อนเป็นรายการจำนวนเต็มบวกซึ่งแทนค่าของเหรียญในการหมุนเวียน รับประกันสองสิ่งเกี่ยวกับมัน:L = [n1, n2, ..., nk]
- GCD ขององค์ประกอบของ
L
คือ 1 L
ไม่มีหมายเลข 1
มันอาจจะไม่เรียงกันและ / หรือมีการซ้ำซ้อน (คิดว่าเหรียญฉบับพิเศษ)
เอาท์พุต
เนื่องจาก GCD ของL
คือ 1 ทุกจำนวนเต็มมากพอm
สามารถแสดงเป็นชุดค่าผสมเชิงเส้นที่ไม่เป็นลบขององค์ประกอบ ในคำอื่น ๆ เรามี
m = a1*n1 + a2*n2 + ... + ak*nk
สำหรับจำนวนเต็มบาง ผลลัพธ์ของคุณเป็นจำนวนเต็มที่มากที่สุดที่ไม่สามารถแสดงในรูปแบบนี้ โดยนัยแล้วเป็นที่ทราบกันว่าเอาต์พุตนั้นน้อยกว่าเสมอหากและเป็นองค์ประกอบสูงสุดและน้อยที่สุดของ( อ้างอิง )ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
กฎระเบียบ
คุณสามารถเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดที่ชนะและไม่อนุญาตช่องโหว่มาตรฐาน หากภาษาของคุณมีการทำงานในตัวสำหรับสิ่งนี้คุณไม่สามารถใช้งานได้ ไม่มีข้อกำหนดสำหรับเวลาหรือประสิทธิภาพของหน่วยความจำยกเว้นว่าคุณควรจะสามารถประเมินกรณีทดสอบก่อนโพสต์คำตอบของคุณ
หลังจากที่ผมโพสต์ความท้าทายนี้ @vihan ใช้ชี้ให้เห็นว่ากองมากเกินมีแน่นอนซ้ำ จากการสนทนาใน Metaนี้ความท้าทายนี้จะไม่ถูกลบเหมือนการทำซ้ำ อย่างไรก็ตามฉันถามว่าคำตอบทั้งหมดตามเวอร์ชั่น SO ควรอ้างอิงต้นฉบับได้รับสถานะ Community Wiki และจะถูกลบหากผู้เขียนต้นฉบับต้องการโพสต์คำตอบของพวกเขาที่นี่
กรณีทดสอบ
[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49
[2,3]
ในเวลาที่เหมาะสมและไม่มีอะไรอื่น [2,5]
จะสร้างรายการ Python ประมาณหนึ่งล้านรายการในหน่วยความจำ
FrobeniusNumber
ใน Mathematica