首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到三个连续的完全数?

如何找到三个连续的完全数?
EN

Stack Overflow用户
提问于 2019-01-30 21:55:34
回答 1查看 116关注 0票数 0

我被要求在6之后找出三个连续的完美数字(即因子(包括1,不包括自身)之和为自身的数字)。以下是我的尝试:

代码语言:javascript
运行
复制
# Find three consecutive perfect numbers after 6
def f(x):
    "Find the sum of all factors."
    factors = []
    for i in range (1,x-1):
        if x%i == 0:
            factors.append (i)
        else:
            pass
    return sum(factors)

counts = 0
perfect_numbers = []
x = 6
while counts <= 2:
    x += 1
    if x == f(x):
        perfect_numbers.append (x)
        counts += 1
    else:
        pass
print(perfect_numbers)

当我运行它时,什么也没有显示出来。我知道可能会有一个非常小的错误,但我花了一整天的时间寻找它,但什么也没有找到。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2019-02-02 03:49:34

虽然你的代码在我的机器上只需要3秒就能计算出想要的结果,但我们可以通过改进下面这行代码将时间减半:

代码语言:javascript
运行
复制
for i in range (1,x-1):

x之后的下一个最高因子是x / 2,因为21之后的下一个最小因子。这让我们可以将上面的代码重写为:

代码语言:javascript
运行
复制
for i in range(1, x // 2 + 1):

此外,如果您以后想在另一个程序中重用此代码,则使用range(1, x - 1)会导致f(2)不正确。针对上述问题和一些样式问题对代码进行了修改:

代码语言:javascript
运行
复制
# Find three consecutive perfect numbers after 6

def f(x):
    "Find the sum of all factors."

    factors = []

    for i in range(1, x // 2 + 1):
        if x % i == 0:
            factors.append(i)

    return sum(factors)

count = 0
number = 6
perfect_numbers = []

while count < 3:
    number += 1

    if number == f(number):
        perfect_numbers.append(number)
        count += 1

print(perfect_numbers)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54442226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档