แรงบันดาลใจจากราคาถูกเร็วดีเราจะใช้อัลกอริทึมที่มีสองอย่าง
คณิตศาสตร์
กำหนดจำนวนเต็มสองไม่ใช่ศูนย์aและb , GCF dเป็นจำนวนเต็มที่มากที่สุดที่แบ่งทั้งaและbโดยไม่เหลือ Bézoutสัมประสิทธิ์คู่ของจำนวนเต็ม(x, y)เช่นว่าขวาน + โดย = d ค่าสัมประสิทธิ์Bézoutไม่ซ้ำกัน ตัวอย่างเช่นกำหนด:
a = 15, b = 9
เรามี
d = 3
x = 2
y = -3
15*2 + 9*(-3) = 30 - 27 = 3
ตั้งแต่
วิธีการทั่วไปในการคำนวณ GCF และสัมประสิทธิ์Bézoutคู่หนึ่งคือการใช้อัลกอริทึมของ Euclidแต่ก็ไม่ได้เป็นวิธีเดียวเท่านั้น
รหัส
โปรแกรมของคุณควรใช้จำนวนเต็มสองตัวเป็นอินพุต มันควรจะส่งออก / คืนปัจจัยที่ยิ่งใหญ่ที่สุดและค่าสัมประสิทธิ์Bézoutหนึ่งคู่
อินพุตตัวอย่าง:
15 9
เอาท์พุทตัวอย่าง
3 (2, -3)
เอาต์พุตสามารถอยู่ในลำดับและรูปแบบใดก็ได้ แต่ควรมีความชัดเจนซึ่งคือ GCF และสัมประสิทธิ์
คนทรยศ
โปรแกรมของคุณมีศักยภาพที่จะถูกเร็วและดี น่าเสียดายที่มันสามารถมีได้สองรายการพร้อมกัน
- เมื่อมันไม่ถูกโปรแกรมควรใช้ทรัพยากรระบบมากเกินไป
- เมื่อมันไม่เร็วโปรแกรมควรใช้เวลานานเกินไป
- เมื่อไม่ดีผลลัพธ์ของโปรแกรมควรผิด
โปรแกรมควรจะสามารถทำ (ทั้งดีไม่ได้ทำ) ทั้งสาม ซึ่งจะทำเมื่อขึ้นอยู่กับคุณ - มันอาจขึ้นอยู่กับเวลาคอมไพเลอร์ซึ่งอินพุตมีขนาดใหญ่ขึ้น ฯลฯ หมายเหตุเพิ่มเติมบางส่วน:
- โปรแกรมของคุณไม่ควรใช้อย่างเห็นได้ชัดและควรผ่านการตรวจสอบคร่าวๆ ฉันจะสงสัยนิดหน่อยถ้าคุณใช้อัลกอริธึมสามแยก
- ในกรณีที่ราคาถูก "ทรัพยากรระบบจำนวนมาก" เป็นสิ่งที่จะทำให้โปรแกรมอื่นช้าลง อาจเป็นหน่วยความจำแบนด์วิดท์ ฯลฯ
- ในการได้อย่างรวดเร็วกรณี "เวลามากเกินไป" หมายความว่าเมื่อเทียบกับวิธีการที่จะทำงานในราคาถูกและดีกรณี โปรแกรมควรจะยังคงเสร็จสิ้น ยิ่งคุณเข้าใกล้ "น่าผิดหวังอย่างไม่น่าเชื่อ แต่ไม่ทำลายพอที่จะหยุดโปรแกรม" ดีกว่า (สนุกและ) ดีกว่า
- ในกรณีที่ดีผลลัพธ์ไม่ควรผิดอย่างชัดเจนและควรผ่านการตรวจสอบคร่าวๆ ฉันสงสัยมากถ้ามันให้ GCF ที่ "2 anna ครึ่ง"
นี่คือการประกวดความนิยมผู้ชนะมากที่สุดจึงชนะ!
แก้ไข
เพื่อความกระจ่างแจ้งฉันกำลังมองหาโปรแกรมที่สามารถ "เร็วและถูก" และ "ถูกและดี" และ "เร็วและดี" ในกรณีที่แตกต่างไม่ใช่โปรแกรมที่ทำอย่างใดอย่างหนึ่ง