Резюме
Привет всем.Я пытаюсь решить относительно простую проблему, связанную с гипотезой Коллатца.
Прежде всего, проблема звучит следующим образом:
следующая последовательность итераций определена для набора натуральных чисел:
n → n / 2 (n четное) n → 3n + 1 (n нечетное)
Использование правила выше и запускс помощью 13 мы генерируем следующую последовательность:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Видно, что эта последовательность (начиная с 13 и заканчивая 1)содержит> 10 терминов.Хотя это еще не доказано (проблема Коллатца), считается, что> все начальные числа заканчиваются на 1.
Какое начальное число, меньше одного миллиона, дает самую длинную цепочку?
ПРИМЕЧАНИЕ: После запуска цепочки условия могут превышать миллион.
Источник: https://projecteuler.net/problem=14
Короткая сноска
Изначально у меня были проблемы с переполнением и отрицательным значением переменных.Хотя я исправил это, используя unsigned long long , как я уже говорил.
Код
#include <iostream>
using namespace std;
int collatz(long long n) {
if (n%2 == 0) return n/2;
return 3*n+1;
}
int main() {
unsigned long long cnt, n, maxcnt=0, num;
for(int i=1; i<1000000; i++) {
cnt=1;
n=i;
while(n != 1) {
n=collatz(n);
cnt++;
}
if(cnt>maxcnt) {
maxcnt=cnt;
num=i;
}
}
cout<<num;
return 0;
}
Результат
Вместо получения любой результат, он просто заканчивается бесконечным циклом.