Следующая последовательность итераций определена для набора натуральных чисел:
n → n/2 (n четно) n → 3n + 1 (n нечетно)
Используя вышеприведенное правило и начиная с 13, мы создаем следующую последовательность:
13 40 20 10 5 16 8 4 2 1 Можно видеть, что эта последовательность (начиная с 13 и заканчивая на 1) содержит 10 терминов. Хотя это еще не доказано (проблема Collatz), считается, что все начальные числа заканчиваются на 1.
Какое начальное число, составляющее менее миллиона, производит самую длинную цепь?
ПРИМЕЧАНИЕ. Как только цепочка начинается, терминам разрешено превышать один миллион.
Я попробовал кодировать решение этого в C с помощью метода bruteforce. Однако, похоже, что моя программа останавливается при попытке рассчитать 113383. Просьба сообщить:)
#include <stdio.h>
#define LIMIT 1000000
int iteration(int value)
{
if(value%2==0)
return (value/2);
else
return (3*value+1);
}
int count_iterations(int value)
{
int count=1;
//printf("%d\n", value);
while(value!=1)
{
value=iteration(value);
//printf("%d\n", value);
count++;
}
return count;
}
int main()
{
int iteration_count=0, max=0;
int i,count;
for (i=1; i<LIMIT; i++)
{
printf("Current iteration : %d\n", i);
iteration_count=count_iterations(i);
if (iteration_count>max)
{
max=iteration_count;
count=i;
}
}
//iteration_count=count_iterations(113383);
printf("Count = %d\ni = %d\n",max,count);
}