Golomb序列前n项和Sum(n)计算Python代码部分测试用例失败问题
错误排查结果
核心逻辑问题
你对Golomb序列的项出现次数的规则总结不符合标准定义:你自定义的数值k出现次数为floor(k/2)+1仅匹配你给出的前25项序列,和标准Golomb序列的核心规则冲突。
标准Golomb序列的定义为:
- G(1) = 1
- 对n>1,G(n) = 1 + G(n - G(G(n-1)))
其中G(n)的含义就是正整数n在序列中出现的次数。举例来说,标准序列中8出现的次数为G(8)=4次,按照你的规则会计算出8出现5次,当测试用例用到序列较靠后的项时,结果自然会出错。
大数值精度隐患
如果测试用例使用的就是你给出的自定义序列规则,那代码的问题出在浮点数精度上:你用math.floor(k/2)计算时,整数k除以2会转为浮点数,当k足够大(超过2^53)时,浮点数无法精确表示大整数,会导致floor计算结果错误。
只需要把对应行替换为整数除法即可完全规避该问题:
num = (k // 2) + 1
内容的提问来源于stack exchange,提问作者Nodirbek O'ktamov
相关产品推荐
相关产品推荐

