浙大版《Python 程序设计》题目集第4章-30 找完数 (20 分)
测试点13超时
from math import sqrt
m,n=input().split()
m=int(m)
n=int(n)
flag=False
for i in range(m,n+1):
f1=False
perfect=[]
for j in range(1,i):
if j>int(sqrt(1.0*i)) and len(perfect)==0:
break
if i%j==0:
perfect.append(j)
if sum(perfect)>i:
break
if sum(perfect)==i:
flag=True
for k in range(len(perfect)):
if k==0:
print('%d = %d'%(i,perfect[k]),end='')
else:
print(' + %d'%(perfect[k]),end='')
print()
if flag==False:
print('None')
已改正,循环范围至sqrt(i)即可,然后需要添加(i//j),并且需要排序,因子1是特殊值。
from math import sqrt
m,n=map(int,input().split())
flag=False
for i in range(m,n+1):
perfect=[]
perfect.append(1)
for j in range(2,int(sqrt(i))+1):
if i%j==0:
perfect.append(j)
if j*j!=i:
perfect.append(i//j)
if sum(perfect)==i:
flag=True
perfect.sort()
for k in range(len(perfect)):
if k==0:
print('%d = %d'%(i,perfect[k]),end='')
else:
print(' + %d'%(perfect[k]),end='')
print()
if flag==False:
print('None')