我认为已经找到一种解决方案,可以找到LIMIT以下的最大Collatz序列,但是这需要很多时间!我的问题确实是它的来源在哪里:代码,软件,硬件?
我已经在Internet上进行了一些研究,并且看到人们在大约2000ms的运行时中以几乎相同的方式进行操作。而我的电脑还没走那么远!我正在使用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;
}
现在,我是否在代码中遗漏了一些错误,关于效率的错误,还是我的笔记本电脑太慢了?
答案 0 :(得分:0)
n需要使用更大的数据类型,很长一段时间就解决了。