Я думаю, что разработали решение для нахождения наибольшей последовательности Коллатца ниже предела, но это занимает много времени!Мой вопрос на самом деле: где источник этого кода: код, программное обеспечение, аппаратное обеспечение?
Я провел какое-то исследование в Интернете и видел, что люди делают это примерно так же, когда время выполнения составляет около 2000 мс.В то время как мой компьютер даже не зашел так далеко!Я использую Visual Studio, C ++.Кстати, после отладки можно увидеть, что вычисление внезапно (останавливается, борется, зависает?) При определении последовательности 113383.
Вот мой маленький фрагмент кода:
(Части скарта и первое, если есть возможные дополнения, которые, как я думал, могут ускорить весь процесс, но не делают. Если я опущу их, то же самое по скорости)
#include <iostream>
#include <set>
#include <map>
using namespace std;
#define LIMIT 1234567
int main()
{
int n = 0;
int compare = 0;
int longest = 0;
int counter = 1;
set <int> nums2excl;
map <int, int> mappi;
map <int, int>::const_iterator itMap = mappi.begin();
for (int i = 13; i < LIMIT; i++)
{
if (nums2excl.find(i) != nums2excl.end())
{
continue;
}
n = i;
while (n != 1)
{
itMap = mappi.find(n);
if (itMap != mappi.end())
{
counter += ((*itMap).second - 1);
break;
}
if (n % 2 == 0)
{
n /= 2;
}
else
{
n = 3 * n + 1;
if (n > i)
{
nums2excl.emplace(n);
}
}
counter++;
}
mappi.emplace(i, counter);
if (counter > compare)
{
compare = counter;
longest = i;
//Test
cout << i << endl;
}
counter = 1;
}
return 0;
}
Теперь, я пропускаю некоторые ошибки вкод, ошибки в эффективности или мой ноутбук слишком медленный для этого?