Я написал базовый скрипт в Python3, который вычисляет гипотезу Collatz. Он принимает положительное целое число в качестве ввода и возвращает число шагов до тех пор, пока последовательность не упадет до 1.
Мой скрипт отлично работает для любых целых входов менее ~ 2 трлн, но выше этого порога выходы слишком малы.
В качестве примера, вот несколько входов, мой вывод скрипта и фактический правильный вывод:
Integer Input Script Output Correct Output
989,345,275,647 1,348 1,348
1,122,382,791,663 1,356 1,356
1,444,338,092,271 1,408 1,408
1,899,148,184,679 1,411 1,411
2,081,751,768,559 385 1,437
2,775,669,024,745 388 1,440
3,700,892,032,993 391 1,443
3,743,559,068,799 497 1,549 '
Правильные выходные значения основаны на этой ссылке: http://www.ericr.nl/wondrous/delrecs.html
Выход моего скрипта всегда ровно на 1,052 меньше, чем правильный вывод для входов выше 2 трлн, но я понятия не имею, что это за причина.
Может ли кто-нибудь объяснить, что неправильно, и как обновить/исправить скрипт, чтобы он работал правильно для всех входов? Я думал, Python может принимать произвольно большие числа без проблем...
Спасибо!
# Python Code for the Collatz Conjecture
# Rules: Take any integer 'n' and assess:
# If integer is even, divide by 2 (n/2)
# If integer is odd, multiply by 3 and add 1 (3n+1)
# Result: a list of all steps until 'n' goes down to 1
while True:
print("Please enter a positive integer:")
n = input("")
if n == 'q':
print("Until next time ...\n")
break
try:
n = int(n)
if n > 0:
i = 0
while n > 1:
if n % 2 == 0:
n = int(n/2)
i += 1
else:
n = int((3*n)+1)
i += 1
print("# of steps to reach '1' = ", str(i), "\n")
else:
print("Sorry, that not a valid entry. Please try again!\n")
except ValueError:
print("Sorry, that not a valid entry. Please try again!\n")