Мне дали задание написать программу гипотезы Коллатца, модифицированную следующим образом:
- Мы знаем, что программа ВСЕГДА делит на 4 четные числа, даже те, которые не делятся на 4, поэтому следующим шагом после 6 будет 6/4 == 1.
- Мы знаем, что программа всегда достигала состояния остановки даже при альтернативном поведении, но не уверены, было ли в коде другое изменение...
и это нужно
- подсчитайте количество шагов от n, пока мы не достигнем условия остановки
- вернуть сумму всех шагов в Shortz(n), включая сам n
как окончательный ответ, мне нужно вернуть (сумма всех шагов 737458374680773) * (количество шагов 98325112)
Проблема в том, что когда я вычисляю это: 737458374680773, оно входит в бесконечный цикл.
Что касается этой подсказки:
не уверен, что было другое изменение в коде...
Я не думаю, что мне нужно что-то менять в формуле нечетных чисел, потому что, на мой взгляд, это было бы слишком надуманным (но, эй, я мало что знаю, просветите меня :)).
Любые идеи относительно того, что проблема с моим кодом или что я не получил относительно задания?
Это мой код:
import math
def shortz(num):
iterations = 0
stepsSum = 0
while( math.isnan(num) or num<0):
num = int(input("Please supply a non-negative number ==> "))
print("")
while(num !=1):
if (num%2==0):
num /= 4
stepsSum += num
print (str(iterations+1) + ") " + str(num))
else:
num = (num*3) -1
print (str(iterations+1) + ") "+ str(num))
iterations += 1
stepsSum += num
print ("the number of iterations is " + str(iterations))
print ("the sum of all steps is " + str(stepsSum))
q=0
while (q<1):
x = int(input("Input positive number: "))
shortz(x)
z = str(input("Again?")).lower()
if z[0]=='n':
q=2
Большое спасибо!