洛谷(仅用于个人学习)
# 求正整数 2 和 n 之间的完全数
## 题目描述
求正整数 $2$ 和 $n$ 之间的完全数(一行一个数)。
完全数:对于一个自然数,所有比它小的所有因数之和,等于它本身,它就是个完全数。如 $6=1+2+3$。
## 输入格式
输入 $n(n \le 10000)$。
## 输出格式
一行一个数,按由小到大的顺序。
一开始想复杂了,写了下面这么一大串,虽然可以实现,但是测试点里面最后一个测试点Time Limit Exceeded.
def allnum(n):
if n<=2:
return None
else:
L=[]
for i in range(1,n):
if n%i==0 and i<n:
L.append(i)
if n==sum(L):
return n
n=int(input())
s=[]
for i in range(3,n):
s.append(i)
for i in s:
if allnum(i)!=None:
print(allnum(i))
后面看了下别人写的,下面这个就可以AC了。
n=int(input())
for i in range(2,n+1):
sum=1
for j in range(2,int(i**0.5)+1):
if i%j==0:
sum += j
if j!=i//j:
sum += i//j
if sum==i:
print(i)