一,什么是完全数?(摘自百度百科)
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。
二,思路
因为老师给的作业是要用到函数的知识,所以这里定义了一个函数的
# 思路:求出该数的所有因子并相加,之后除以2判断是否等于该数 # 1.循环数字 # 2.test函数判断 # 2.1判断素数的方法求出各个因子相加 # 2.2相加的和等于要判断的数的2倍
方法一:
import math #函数中用到了开根号函数sqrt()
def test(i):
sum=0
for j in range(1,int(math.sqrt(i))+1,1): #只需判断从1到该数的根号即可
if i%j==0:
sum=sum+j+i/j #除以一次j相当于求得了两个真因子
else:
continue
if sum==i*2:
print(i)
for n in range(1,10001,1): #从1开始循环,到10001结束,每次增加1
test(n) #调用test函数
方法二
def test(i):
sum=0
for j in range(1,i):
if i%j==0:
sum=sum+j #因为是从1到i,所以不用加上1/j
else:
continue
if(sum==i):
print(i)
for n in range(1,10001):
test(n)
方法三:while循环
import math
def test(i):
sum=0
end = int(math.sqrt(i))
while end > 1: #要判断的数的根号到1
if i % end == 0:
sum=sum+end+i/end
end-=1
else:
end-=1
if(sum+1==i):
print(i)
for n in range(2,10001): #这里没把1包含进去
test(n)
最后来个没有函数的吧
for i in range(1,10001):
sum=0
for j in range(1,i):
if i%j==0:
sum=sum+j
else:
continue
if(sum==i):
print(i)