为了账号安全,请及时绑定邮箱和手机立即绑定

寻找完美数的Python算法

寻找完美数的Python算法

梵蒂冈之花 2021-07-22 18:15:01
请您帮忙更正此代码!这是为了找到低于 10,000 的设定限制的所有完美数字,我用评论来解释我在做什么。谢谢!#Stores list of factors and first perfect numberfacs = []x = 1#Defines function for finding factorsdef findfactors(num):    #Creates for loop to find all factors of num    for i in range(1, num + 1):        if num % i == 0:        #Stores factor in facs        facs.append(i)#Activates loopwhile x < 10000:    #Finds factors of x and appends them to list    findfactors(x)    #Finds sum of list    facsum = sum(facs)    #Makes decision based on  sum of factors and original number    if facsum == x:        #Ouputs and increases x        print(x)        x += 1    else:        #Increases x        x += 1
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

在 def 中初始化列表并返回,并且范围不应包括原始num范围,因此范围将从 1 到 num,其中包括 1 但不包括原始num范围,因此它将生成范围从1到num-1


#Stores list of factors and first perfect number

x = 1

#Defines function for finding factors

def findfactors(num):

    facs = []

    for i in range(1, num):

        if num % i == 0:

            #Stores factor in facs

            facs.append(i)


    return facs


#Activates loop

while x < 1000:


    #Finds factors of x and appends them to list

    facs=findfactors(x)


    #Finds sum of list

    facsum = sum(facs)


    #Makes decision based on  sum of factors and original number

    if facsum == x:

        #Ouputs and increases x

        print(x)

    x+= 1

比从Python 中查找数字的所有因子的最有效方法是什么生成列表方法要快得多?


#Stores list of factors and first perfect number

x = 1

#Defines function for finding factors

from functools import reduce


def factors(n):

    return set(reduce(list.__add__, 

                ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))


#Activates loop

while x < 10000:

    #Finds factors of x and appends them to list

    facs=factors(x)

    facs.remove(x) # remove original number as it is not required further


    #Finds sum of list

    facsum = sum(facs)


    #Makes decision based on  sum of factors and original number

    if facsum == x:

        #Ouputs and increases x

        print(x)

    x+= 1


查看完整回答
反对 回复 2021-07-28
?
长风秋雁

TA贡献1757条经验 获得超7个赞

这是您的逻辑的更简单实现。


x = 1


#Defines function for finding factors

def isperfectnum(num):

sum=0

    #Creates for loop to find all factors of num

    for i in range(1, num ):

        if num % i == 0:

           sum=sum+i

    if sum==num:

        return TRUE

    else 

        return FALSE


#Activates loop


while x < 10000:


    #Finds perfect numbers

    if isperfectnum(x):

       print(x)

    x=x+1


查看完整回答
反对 回复 2021-07-28
  • 3 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号