ความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่รับอินพุตจำนวนเต็มสองตัวi
และj
และเอาท์พุทตัวหารร่วมที่ยิ่งใหญ่ที่สุด คำนวณโดยใช้อัลกอริทึมแบบยุคลิด (ดูด้านล่าง)
อินพุต
อินพุตอาจถูกใช้เป็นการแทนค่าสตริงที่คั่นด้วยช่องว่างi
และj
หรือเป็นจำนวนเต็มสองตัวแยกกัน คุณสามารถสันนิษฐานได้ว่าจำนวนเต็มจะน้อยกว่าหรือเท่ากับ 10,000 คุณสามารถสันนิษฐานได้ว่าจำนวนเต็มอินพุทจะไม่เป็นไพรม์ต่อกัน
การสลายแบบยุคลิด
จำนวนที่มากขึ้นระหว่างi
และj
หารด้วยจำนวนที่น้อยกว่าให้มากที่สุด จากนั้นส่วนที่เหลือจะถูกเพิ่ม 0
ขั้นตอนนี้ซ้ำกับที่เหลือและจำนวนก่อนจนเหลือจะกลายเป็น
ตัวอย่างเช่นถ้าอินพุตคือ1599 650
:
1599 = (650 * 2) + 299
650 = (299 * 2) + 52
299 = (52 * 5) + 39
52 = (39 * 1) + 13
39 = (13 * 3) + 0
ตัวเลขสุดท้าย13
,, เป็นตัวหารร่วมมากของจำนวนเต็มสองจำนวน มันสามารถมองเห็นได้เช่นนี้
เอาท์พุต
ผลลัพธ์ของคุณจะต้องแยกตามแบบฟอร์มด้านบนตามด้วย newline และ GCD มันสามารถส่งออกผ่านสื่อใด ๆ
ตัวอย่าง
ปัจจัยการผลิต
18 27
50 20
447 501
9894 2628
เอาท์พุท
27 = (18 * 1) + 9
18 = (9 * 2) + 0
9
50 = (20 * 2) + 10
20 = (10 * 2) + 0
10
501 = (447 * 1) + 54
447 = (54 * 8) + 15
54 = (15 * 3) + 9
15 = (9 * 1) + 6
9 = (6 * 1) + 3
6 = (3 * 2) + 0
3
9894 = (2628 * 3) + 2010
2628 = (2010 * 1) + 618
2010 = (618 * 3) + 156
618 = (156 * 3) + 150
156 = (150 * 1) + 6
150 = (6 * 25) + 0
6
หมายเหตุ: เอาต์พุตไม่จำเป็นต้องเว้นระยะห่างตามที่อยู่ด้านบน ระยะห่างเป็นเพียงเพื่อความชัดเจน จำเป็นต้องใส่วงเล็บ
โบนัส
หากการแสดงผลของคุณเป็นเว้นวรรคข้างต้นคุณอาจเพิ่มโบนัส -10% ให้กับคะแนนของคุณ