完数
类型:列表元组
描述
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出最小的N(1 <= N <=8)个完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
(注:此题大家不要追求满分,最后两个测试点共占12%,15分的题目只占1.8分,可以忽略,最后两个测试点需要用优化的方法才可以通过)
输入格式
一个正整数N,如:1
输出格式
如:6=1+2+3
示例
输入:1
输出:6=1+2+3
参考代码
def isPrime(n): #判断素数的函数
if n < 2:
return False #0和1不是素数
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
else:
return True
def isPerfect(m): #判断完数的函数
if isPrime(m) and isPrime(2**m-1):
s = 2**(m-1)*(2**m-1)
ls.append(s)
for i in range(2, s // 2 + 1):
if s % i == 0:
factor.append(i)
return s
else:
return False
n = int(input())
count,num = 0, 1
ls = []
while count <n:
factor = []
if isPerfect(num):
print('{}=1'.format(ls[count]), end='')
for j in factor:
print("+{}".format(j), end='')
count = count + 1
print()
num = num + 1