问题标签 [collatz]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7281 浏览

c - Collat​​z链递归函数C

我正在尝试创建一些代码,当给定一个起始数字时,它会尝试找到相应的 collat​​z 链的长度。

我希望递归地做到这一点,这就是我到目前为止所拥有的:

问题当然是该函数最终到达其端点,但随后作为链的长度返回,这成为新的数字..

我如何构造这个程序,以便当计数到达其端点时,我可以将此值作为第一次调用的输出?

0 投票
1 回答
183 浏览

haskell - Haskell 初学者:“没有实例...来自...”错误

我的目标是编写一个函数来计算低于某个数字“n”的最大 Collat​​z 数。(对于熟悉的人来说,这是一个 Project Euler 问题。)

一些上下文:给定整数的 Collat​​z 数等于该整数的 Collat​​z 序列的长度。整数的 Collat​​z 序列计算如下:序列中的第一个数字(“n0”)是该整数本身;如果 n0 是偶数,则序列中的下一个数字(“n1”)等于 n / 2;如果 n0 是奇数,则 n1 等于 3 * n0 + 1。我们继续递归扩展序列,直到到达 1,此时序列完成。例如,5 的 collat​​z 序列是:{5, 16, 8, 4, 2, 1}(因为 16 = 3 * 5 + 1, 8 = 16 / 2, 4 = 8 / 2,...)

我正在尝试编写一个函数(“maxCollat​​zUnder”),当传递一个整数“m”时,它返回具有最长 Collat​​z 序列(即最大 Collat​​z 数)的整数(小于或等于 m)。例如,maxCollat​​z 20(即低于(包括)20 的哪个整数具有最长的拼贴序列?)应该返回 19(数字 19 具有长度为 21 的 Collat​​z 序列:[19,58,29,88,44,22, 11,34,17,52,26,13,40,20,10,5,16,8,4,2,1])。

在下面的代码中,“collat​​z”和“collat​​zHelper”函数可以正确编译和运行。我在使用“maxCollat​​zUnder”功能时遇到问题。该函数打算 (I) 为从 1 到 m 的每个整数 x 创建一个 2 元组 (x,y) 的列表(其中 m 是函数参数),其中 y 表示整数 x 的 Collat​​z 数,然后 ( II) 在列表中查找最高的 Collat​​z 数(即 y)并返回其相关的整数(即 x)

当我(尝试)编译时出现以下错误。

奇怪的是,如果我将“maxCollat​​zUnder”更改为以下代码(见下文),代码可以正确编译并运行。唯一的变化是,在下面的版本中,折叠函数返回“j”(即最大的 Collat​​z 数)而不是“i”(即,生成最大 Collat​​z 数的整数)。

欢迎提出更有效/更优雅的方法的建议,尽管我仍然有兴趣了解此错误的原因。

0 投票
1 回答
745 浏览

java - collat​​z 序列 - 优化代码

作为作业的附加问题,我们被要求找到产生最长 collat​​z 序列的 10 个起始数字 (n)。(其中 0 < n < 10,000,000,000)我编写的代码有望实现这一点,但我估计需要整整 11 个小时才能计算出答案。

我注意到了一些小的优化,比如从最大到最小,所以添加到数组中的操作更少,并且只计算 10,000,000,000/2^10 (=9765625) 和 10,000,000,000 之间,因为必须有 10 个长度更长的序列,但是我看不出还有什么我能做的。任何人都可以帮忙吗?

相关代码序列搜索算法

存储算法

0 投票
4 回答
350 浏览

c++ - 陷入无限循环?(也许)

我正在尝试用 c++ 完成 Project Euler Problem 14,但我真的被卡住了。现在,当我运行问题时,它卡在 So Far:计数最高的数字:113370,计数为 155 So Far:计数最高的数字,但是当我尝试将 i 值更改为超过 113371 时,它可以工作。到底是怎么回事??

问题是:

为正整数集定义了以下迭代序列: n → n/2(n 为偶数) n → 3n + 1(n 为奇数)

使用上面的规则并从 13 开始,我们生成以下序列:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 可以看出,这个序列(从 13 开始,到 1 结束)包含 10 个项。虽然尚未证明(科拉茨问题),但认为所有起始数字都以 1 结束。100 万以下的哪个起始数字产生最长的链?

0 投票
0 回答
187 浏览

c++ - 使用 C++ 映射的 Collat​​z 记忆

我决定编写输出 Collat​​z 树的代码。那可能必须等待另一个问题;当前的问题是:

我们只想计算给定数字的 Collat​​z 序列一次,然后使用 memoization。这就是我希望在我的代码中实现的:

这个想法是这样的:对于给定的数字,计算序列,检查每一步我们是否已经达到了一个我们已经知道序列的数字。如果我们有,那么只需将相应的向量附加到当前向量。

例子:

我们应该早点得到{5, {5,16,8,4,2,1}}。所以,当我们计算一个序列时,比如说,13,我们应该做{13, {13,40,20,10, paste_vector_for_5_here}}.

问题是:考虑到整个 collat​​z 树是作为 ? 实现的,最好的方法是什么map<int, vector<int>>

附言

我的 lambda 很笨拙:我对它们还不是很好。

0 投票
5 回答
777 浏览

python - 科拉茨序列

如何将整数作为输入,其输出将是该数字之后的Collat​​z 序列。该序列由以下规则计算:

  • 如果 n 是偶数,则下一个数字是n/2
  • 如果 n 是奇数,则下一个数是3n + 1

例如,从 11 开始

这是我现在的代码:

如果我执行此操作并插入一个数字,则不会发生任何事情。

0 投票
1 回答
299 浏览

sequence - 枫序列长度

我正在尝试在 Maple 中创建一个基本程序,当用户给定一个数字 (n) 时运行 Collat​​z 序列。对于那些不知道的人,Collat​​z 序列基本上是“如果给定的数字是奇数,则做 3n + 1,如果是偶数,则除以 2,然后对每个答案继续这样做。最终,答案将达到 1 “我试图获取执行序列的迭代次数,比如如果序列运行了 10 次,它会打印出来。这是我当前的代码:

到目前为止,这是可行的,如果输入了 proc CollSeq(50),它将在 50 上执行 Collat​​z 序列,直到达到 1。我坚持的一点是序列的长度。我已经阅读并了解到我可以使用 Maple 的 nops([]) 函数来获取序列的长度。这是我尝试过的:

我有一种感觉,这是非常错误的。任何帮助将非常感激。

非常感谢

0 投票
1 回答
77 浏览

haskell - 单功能 collat​​z 链中的类型签名

我是 haskell 的新手,并且在类型签名上苦苦挣扎。我正在研究单功能 Collat​​z 链生成器。我看过一些haskell collat​​z问题,但没有看到任何回答我试图回答的问题。我正在使用 GHCI。

这是我的功能:

看起来这应该是直截了当的;它应该只是将新的转换附加到列表中。但是,解释器给了我这些错误:

编译器告诉我使用的类型签名的每种组合似乎都失败了

我显然错过了一些基本的东西。谁能告诉我如何制作具有单一功能的 collat​​z 链?

0 投票
2 回答
416 浏览

c - 具有高值的分段错误 (Xeon Phi)

我正在通过 Stampede 使用 Xeon Phi 解决 Collat​​z 猜想问题。我已经测试了我的代码已经过测试并且对于高达 100,000 的值可以正常工作,但是测试高达 100 万的值时,我几乎立即收到了分段错误(“SIGSEV”)。几天来我一直在用头撞墙,但根本无法弄清楚这个错误。任何帮助都非常感谢。

我非常有信心问题会出现在上面的代码段中。

0 投票
1 回答
185 浏览

haskell - 如何优化这个 Haskell 程序?

我使用以下代码通过使用状态单子缓存输入结果对来记忆 Collat ​​z 函数的总停止时间。

此外,snd状态的一部分用于跟踪使输出最大化的输入值,目标是找到使总停止时间最大化的百万以下的输入值。(这个问题可以在项目 euler上找到。

该程序运行良好,但速度很慢。所以我想花一些时间弄清楚如何让它更快地工作。

我查看了RWH的分析章节,但不知道问题出在哪里:

我使用 编译它ghc -O2 -rtsopts -prof -auto-all -caf-all -fforce-recomp,然后运行它,+RTS -s -p结果如下:

.prof文件:

我可以看到垃圾收集器花费了太多时间,而程序大部分时间都在运行memoCollatz

这是堆分析的两个屏幕截图:

图像1

图像2

我预计内存使用量会增加然后迅速减少,因为程序正在使用 Map 进行记忆,但不确定是什么导致图表快速下降(也许这是可视化结果时的错误?)。

我想知道如何分析这些表格/图表以及它们如何表明真正的问题。