问题标签 [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.
c - Collatz链递归函数C
我正在尝试创建一些代码,当给定一个起始数字时,它会尝试找到相应的 collatz 链的长度。
我希望递归地做到这一点,这就是我到目前为止所拥有的:
问题当然是该函数最终到达其端点,但随后作为链的长度返回,这成为新的数字..
我如何构造这个程序,以便当计数到达其端点时,我可以将此值作为第一次调用的输出?
haskell - Haskell 初学者:“没有实例...来自...”错误
我的目标是编写一个函数来计算低于某个数字“n”的最大 Collatz 数。(对于熟悉的人来说,这是一个 Project Euler 问题。)
一些上下文:给定整数的 Collatz 数等于该整数的 Collatz 序列的长度。整数的 Collatz 序列计算如下:序列中的第一个数字(“n0”)是该整数本身;如果 n0 是偶数,则序列中的下一个数字(“n1”)等于 n / 2;如果 n0 是奇数,则 n1 等于 3 * n0 + 1。我们继续递归扩展序列,直到到达 1,此时序列完成。例如,5 的 collatz 序列是:{5, 16, 8, 4, 2, 1}(因为 16 = 3 * 5 + 1, 8 = 16 / 2, 4 = 8 / 2,...)
我正在尝试编写一个函数(“maxCollatzUnder”),当传递一个整数“m”时,它返回具有最长 Collatz 序列(即最大 Collatz 数)的整数(小于或等于 m)。例如,maxCollatz 20(即低于(包括)20 的哪个整数具有最长的拼贴序列?)应该返回 19(数字 19 具有长度为 21 的 Collatz 序列:[19,58,29,88,44,22, 11,34,17,52,26,13,40,20,10,5,16,8,4,2,1])。
在下面的代码中,“collatz”和“collatzHelper”函数可以正确编译和运行。我在使用“maxCollatzUnder”功能时遇到问题。该函数打算 (I) 为从 1 到 m 的每个整数 x 创建一个 2 元组 (x,y) 的列表(其中 m 是函数参数),其中 y 表示整数 x 的 Collatz 数,然后 ( II) 在列表中查找最高的 Collatz 数(即 y)并返回其相关的整数(即 x)
当我(尝试)编译时出现以下错误。
奇怪的是,如果我将“maxCollatzUnder”更改为以下代码(见下文),代码可以正确编译并运行。唯一的变化是,在下面的版本中,折叠函数返回“j”(即最大的 Collatz 数)而不是“i”(即,生成最大 Collatz 数的整数)。
欢迎提出更有效/更优雅的方法的建议,尽管我仍然有兴趣了解此错误的原因。
java - collatz 序列 - 优化代码
作为作业的附加问题,我们被要求找到产生最长 collatz 序列的 10 个起始数字 (n)。(其中 0 < n < 10,000,000,000)我编写的代码有望实现这一点,但我估计需要整整 11 个小时才能计算出答案。
我注意到了一些小的优化,比如从最大到最小,所以添加到数组中的操作更少,并且只计算 10,000,000,000/2^10 (=9765625) 和 10,000,000,000 之间,因为必须有 10 个长度更长的序列,但是我看不出还有什么我能做的。任何人都可以帮忙吗?
相关代码序列搜索算法
存储算法
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 万以下的哪个起始数字产生最长的链?
c++ - 使用 C++ 映射的 Collatz 记忆
我决定编写输出 Collatz 树的代码。那可能必须等待另一个问题;当前的问题是:
我们只想计算给定数字的 Collatz 序列一次,然后使用 memoization。这就是我希望在我的代码中实现的:
这个想法是这样的:对于给定的数字,计算序列,检查每一步我们是否已经达到了一个我们已经知道序列的数字。如果我们有,那么只需将相应的向量附加到当前向量。
例子:
我们应该早点得到{5, {5,16,8,4,2,1}}
。所以,当我们计算一个序列时,比如说,13,我们应该做{13, {13,40,20,10, paste_vector_for_5_here}}
.
问题是:考虑到整个 collatz 树是作为 ? 实现的,最好的方法是什么map<int, vector<int>>
?
附言
我的 lambda 很笨拙:我对它们还不是很好。
python - 科拉茨序列
如何将整数作为输入,其输出将是该数字之后的Collatz 序列。该序列由以下规则计算:
- 如果 n 是偶数,则下一个数字是
n/2
- 如果 n 是奇数,则下一个数是
3n + 1
。
例如,从 11 开始
这是我现在的代码:
如果我执行此操作并插入一个数字,则不会发生任何事情。
sequence - 枫序列长度
我正在尝试在 Maple 中创建一个基本程序,当用户给定一个数字 (n) 时运行 Collatz 序列。对于那些不知道的人,Collatz 序列基本上是“如果给定的数字是奇数,则做 3n + 1,如果是偶数,则除以 2,然后对每个答案继续这样做。最终,答案将达到 1 “我试图获取执行序列的迭代次数,比如如果序列运行了 10 次,它会打印出来。这是我当前的代码:
到目前为止,这是可行的,如果输入了 proc CollSeq(50),它将在 50 上执行 Collatz 序列,直到达到 1。我坚持的一点是序列的长度。我已经阅读并了解到我可以使用 Maple 的 nops([]) 函数来获取序列的长度。这是我尝试过的:
我有一种感觉,这是非常错误的。任何帮助将非常感激。
非常感谢
haskell - 单功能 collatz 链中的类型签名
我是 haskell 的新手,并且在类型签名上苦苦挣扎。我正在研究单功能 Collatz 链生成器。我看过一些haskell collatz问题,但没有看到任何回答我试图回答的问题。我正在使用 GHCI。
这是我的功能:
看起来这应该是直截了当的;它应该只是将新的转换附加到列表中。但是,解释器给了我这些错误:
编译器告诉我使用的类型签名的每种组合似乎都失败了
我显然错过了一些基本的东西。谁能告诉我如何制作具有单一功能的 collatz 链?
c - 具有高值的分段错误 (Xeon Phi)
我正在通过 Stampede 使用 Xeon Phi 解决 Collatz 猜想问题。我已经测试了我的代码已经过测试并且对于高达 100,000 的值可以正常工作,但是测试高达 100 万的值时,我几乎立即收到了分段错误(“SIGSEV”)。几天来我一直在用头撞墙,但根本无法弄清楚这个错误。任何帮助都非常感谢。
我非常有信心问题会出现在上面的代码段中。
haskell - 如何优化这个 Haskell 程序?
我使用以下代码通过使用状态单子缓存输入结果对来记忆 Collat z 函数的总停止时间。
此外,snd
状态的一部分用于跟踪使输出最大化的输入值,目标是找到使总停止时间最大化的百万以下的输入值。(这个问题可以在项目 euler上找到。
该程序运行良好,但速度很慢。所以我想花一些时间弄清楚如何让它更快地工作。
我查看了RWH的分析章节,但不知道问题出在哪里:
我使用 编译它ghc -O2 -rtsopts -prof -auto-all -caf-all -fforce-recomp
,然后运行它,+RTS -s -p
结果如下:
和.prof
文件:
我可以看到垃圾收集器花费了太多时间,而程序大部分时间都在运行memoCollatz
。
这是堆分析的两个屏幕截图:
我预计内存使用量会增加然后迅速减少,因为程序正在使用 Map 进行记忆,但不确定是什么导致图表快速下降(也许这是可视化结果时的错误?)。
我想知道如何分析这些表格/图表以及它们如何表明真正的问题。