题解 | #完全数计算#几处魔鬼细节

完全数计算

http://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84

更新:

#用完及时del
set((t,i))
_sum+=sum(_set)
del(_set)

图片说明
更新:原来的第四行开始,改成:
不存约数,只记录它们的和

        _sum=1
        #这里int(n/2)曾错写成int(n/2+1)
        #更新:用int(n**0.5)+1快很多
        for i in range(2,int(n**0.5)+1):
            t,r=divmod(n,i)
            if r==0:
                _sum+=sum(set((t,i)))

图片说明

def fun(n):
    if n<3:
        ot = 0
    else:
        yins=[1]
        #这里int(n/2)曾错写成int(n/2+1)
        #更新:用int(n**0.5)+1快很多
        for i in range(2,int(n/2)):
            t,r=divmod(n,i)
            if r==0:
                #曾错写成[r,t]
                yins.extend([i,t])
        #16/4=4,yins里面就会有2个4,要变成set
        if sum(set(yins)) == n:
            ot = 1
        #曾忘记加这个else, fun(n)返回None, int+None会有TypeError,
        #但之前因except里这作break,看不到报错
        else:
            ot=0
    return ot

while 1:
    try:
        n=int(input())
        tot=0
        for ii in range(1,n+1):
            tot+=fun(ii)
        print(tot)

    except Exception as e:
        if not isinstance(e,EOFError):
            print('leo_you_have_Error')
        break
全部评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务