题解 | #完全数计算#几处魔鬼细节
完全数计算
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