小编pos*_*ty0的帖子

解决"没有连续数字的子集数"时的OverFlowError

我正在尝试使用Python解决TalentBuddy中的问题

问题是 :

给定数字N.打印到标准输出可以使用{1,2..N}集合形成的子集总数,但确保没有子集包含任何两个连续的整数.最终计数可能非常大,这就是您必须打印结果模524287的原因.

我已经完成了代码.除了测试6之外,所有测试都没问题.OverFlowError当测试10000000作为我的函数的参数提交时,我得到了.我不知道该怎么做才能解决这个错误

我的代码:

import math
def count_subsets(n):
    step1 = (1 / math.sqrt(5)) * (((1 + math.sqrt(5)) / 2) ** (n + 2))
    step2 = (1 / math.sqrt(5)) * (((1 - math.sqrt(5)) / 2) ** (n + 2))
    res = step1 - step2
    print int(res) % 524287
Run Code Online (Sandbox Code Playgroud)

我想这会占用大量内存.在我在互联网上找到相同主题的数学公式后,我写了这个. 数学公式
我想我的代码根本不是Pythonic.

如何做到这一点,"Pythonic"方式?怎么解决OverFlowError

编辑:在问题中,我给出了示例输入3,结果(输出)是5.

说明:5套是,{}, {1}, {2}, {3}, {1,3}.

但是,在测试6中,我给出的问题是:

测试#6的摘要

输入测试:

[10000000]

预期产量:

165366

你的输出:

Traceback (most …
Run Code Online (Sandbox Code Playgroud)

python python-2.7

4
推荐指数
1
解决办法
285
查看次数

标签 统计

python ×1

python-2.7 ×1