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

完全数计算

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
全部评论

相关推荐

码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务