Используя C ++, я писал программу, которая брала бы первые n чисел, начиная с 1, и выводила их соответствующий «счетчик путей», который я и называю количеством итераций последовательности Коллатца, которое требуется, чтобы получить число от нуля ( увидеть Статья в википедии на гипотезе Коллатца). Например, номер пути 8 равен 3, поскольку для перехода к 1 требуется 3 шага (8: 2 = 4; 4: 2 = 2; 2: 2 = 1).
Таким образом, мы имеем простую функцию:
int pathNumber(int n){
int pathCount = 0;
while(n > 1){
if(n % 2 == 0){
n /= 2;
}else{
n *= 3;
n ++;
}
pathCount ++;
}
return pathCount;
}
Затем я решил написать обратную функцию этого (называемую firstInstanceOf (n)), которая будет вычислять первый экземпляр любого заданного pathNumber в порядке возрастания от 1. Например, firstInstanceOf (3) будет 8, потому что 8 является первым число в порядке возрастания от 1, для которого pathCount равен 3. Функция, которую я написал, выглядит следующим образом:
int firstInstanceOf(int s){
int i = 0;
while(pathNumber(i) != s){
i ++;
}
return i;
}
где s — входное значение, а i — переменная, которая увеличивается на 1 каждый раз. Как бы просто это ни казалось, код компилируется без каких-либо предупреждений, но просто не будет вычисляться. Я попытался переформатировать последнюю функцию в виде цикла for, бесконечного цикла и т. Д., Но программа все еще сохраняет буферизацию на неопределенный срок или вывод фиктивных значений. Я чувствую, что упускаю что-то очень очевидное? Любая помощь приветствуется.
Задача ещё не решена.
Других решений пока нет …