首页 > 解决方案 > Python中的下一个完美数字函数

问题描述

我想要做什么:如果一个数字的除数之和等于这个数字,我想打印它。如果不是,我想检查下一个数字是否为真,并打印满足该条件的最小数字。我有这个:

def next_perfect(n):
    sum=0
    for d in range(1, n):
        if n%d==0:
            sum=sum+d
    if sum==n:
        return n
    else:
        sum=0
        n=n+1
        for d in range(1, n):
            if n%d==0:
                sum=sum+d
            if sum==n:
                return n
            else:


print(next_perfect(25))
                

例如:

print(next_perfect(25))

它应该检查 25,然后检查 26、27、28 并打印 28。我不知道如何结束它。我希望这个循环回到第一个“else”并再次开始检查下一个数字的条件,总是在数字不好的情况下。

标签: python

解决方案


使用while循环,return当您找到所需的数字时:

def next_perfect(n):
    while True:
        total=sum(d for d in range(1, n) if n%d==0)
        if total==n:
            return n
        n=n+1

>>> next_perfect(25)
28

或递归:

def next_perfect(n):
    total=sum(d for d in range(1, n) if n%d==0)
    if total==n:
        return n
    else:
        return next_perfect(n+1)

推荐阅读