Collatz ลำดับ (ที่เรียกว่าปัญหา 3x + 1) เป็นที่ที่คุณเริ่มต้นด้วยจำนวนเต็มบวกใด ๆ สำหรับตัวอย่างนี้เราจะใช้ 10 และใช้ชุดของขั้นตอนไปนี้:
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10 คือเลขดังนั้นเราหารด้วย 2 เพื่อให้ได้ 5 5 จึงแปลกเราจึงคูณด้วย 3 และเพิ่ม 1 เพื่อได้ 16 16 เท่ากับดังนั้นตัดครึ่งให้ได้ 8 ครึ่งครึ่งของ 8 คือ 4 ครึ่งหนึ่งของ 4 คือ 2 และครึ่งหนึ่งของ 2 คือ 1 เนื่องจากเราใช้ 6 ขั้นตอนเราบอกว่า 10 มีระยะหยุด 6
หมายเลข Super Collatz เป็นตัวเลขที่มีระยะการหยุดมากกว่าระยะทางหยุดของหมายเลขน้อยกว่านั้น ตัวอย่างเช่น 6 เป็นจำนวน Super Collatz เนื่องจาก 6 มีระยะหยุด 8, 5 มีระยะหยุด 5, 4 มี 2, 3 มี 7, 2 มี 1 และ 1 มี 0 ( A006877ใน OEIS) คุณต้อง ใช้จำนวนnเป็น input และ output ออกทุกหมายเลขซูเปอร์ Collatz ถึงn
กฎระเบียบ
โปรแกรมหรือฟังก์ชั่นเต็มรูปแบบเป็นที่ยอมรับ
คุณไม่สามารถคำนวณล่วงหน้าหรือรหัสยากในลำดับ Super Collatz
คุณสามารถป้อนข้อมูลในรูปแบบที่เหมาะสม
เอาต์พุตสามารถส่งคืนเป็นรายการจากฟังก์ชันหรือพิมพ์ไปยัง STDOUT หรือไฟล์ แล้วแต่จำนวนใดจะสะดวกที่สุด
อินพุตที่ไม่ถูกต้อง (ไม่ใช่ตัวเลขทศนิยมจำนวนลบเป็นต้น) ส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนด
ไพ ธ อนตัวอย่าง
def collatzDist(n):
if n == 1:
return 0
if n % 2 == 0:
return 1 + collatzDist(n / 2)
return 1 + collatzDist((n * 3) + 1)
n = input()
max = -1
superCollatz = []
for i in range(1, n + 1):
dist = collatzDist(i)
if dist > max:
superCollatz.append(i)
max = dist
print superCollatz
ตัวอย่าง IO:
#in #out
4 --> 1, 2, 3
50 --> 1, 2, 3, 6, 7, 9, 18, 25, 27
0 --> invalid
10000 --> 1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171
นอกจากนี้ยังมีตัวเลข Super Collatz 44 หมายเลขแรก:
1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239, 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935, 626331, 837799