题目描述
求正整数2和n(n≤30000)之间的所有完全数,一行输出一个。
所谓完全数:因子之和等于它本身的自然数,如6=1+2+3,注意因子包括1但不包括自身。
提示
输入输出格式
输入格式
输入n。
输出格式
一行一个数,按由小到大的顺序。
输入输出样例
输入
7
输出
6
时间限制
1500ms
内存限制
65536KB
偷鸡式搞法,但是你就说行不行吧?而且我敢肯定它的时间绝对是最少的,hhhhh
a = [6, 28, 496, 8128]
y = int(input())
for i in a:
if i < y:
print(i)
好了好了,正经写
import math
def perfect(a):
sum = 1
for i in range(2, (int)(math.sqrt(a)) + 1):
if a % i == 0:
sum += i + a / i
if (a == sum):
return True
else:
return False
y = int(input())
for i in range(2, y + 1):
if (perfect(i)):
print(i)
这题难点就是如何减小时间开支