扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
不知道你的完美数是怎么定义的,原先写了一个判断完美数,并输出小于输入值N的所有完美数的,稍微修改了下。
创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为奉节企业提供专业的成都网站建设、网站建设,奉节网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
#!/usr/bin/python
# -*- coding:utf-8 -*-
# @Time : 2018/6/16 16:45
# @File : NthPerfectNumber.py
"""
输出第N个完美数
"""
def is_perfect(anum):
"""判断一个数是不是完美数"""
assert anum 0, '完美数是大于0的整数'
ll = []
num = 0
for i in xrange(1, anum):
if anum % i == 0:
ll.append(i)
num = sum(ll)
if num == anum:
return True
else:
return False
def nthPerfectNumber(n):
m = 0
t = 1
temp = []
while m n:
if is_perfect(t):
temp.append(t)
m += 1
t += 1
else:
t += 1
else:
return temp[n - 1]
if __name__ == '__main__':
nths = int(raw_input(u'请输入需要返回的第N个完美数:'))
print u'第{0}个完美数是:{1}'.format(nths, nthPerfectNumber(nths))
所谓完全数是指,如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。
例如:第一个完全数是6,它有约数 1、 2、 3、 6,除去它本身6外,其余3 个数相加,1+2+3=6。 第二个完全数是28,它有约数 1、 2、 4、 7、 14、 28,除去它本身28外,其余5个数相加,1+2+4+7+14=28
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
a = []
for i in range(1, 1000):
s = 0
for j in range(1, i):
if i % j == 0 and j i:
s += j
if s == i:
print(i)
a.append(i)
print("1000以内的完全数为: %s" % a)
运行结果如图所示
def main(n,high):
x=0
perfectnum=[]
while n=high:
total=0
for t in range(n//2,0,-1):
if n%t==0:
total+=t
if totaln or (totaln and t==1):
break
else:
x+=n
perfectnum.append("%d"%n)
n+=1
return (perfectnum,x)
if __name__=='__main__':
perfectnum,total=main(2,20000)
print("%s = %d"%(' + '.join(perfectnum),total))
a=range(1,101)
b=range(1,101)
result=[]
for i in a:
tmp=[]
for k in b:
if ki:
if not i%k:
tmp.append(k)
else:
continue
else:
break
count=0
for m in tmp:
count=count+m
if count==i:
result.append(i)
else:
continue
print(result)
# !/usr/bin/python27
# coding: utf8
'''
计算完美数(完全数)
'''
for n in range(1,1000):
nlist = [i for i in range(1,n) if n%i == 0]
if sum(nlist) == n:
print ''.join([str(n),'=','+'.join([str(n) for n in nlist])])
运行结果:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
或者这样:
print [n for n in range(1,1000) if sum([i for i in range(1,n) if n%i == 0]) == n]
结果:
[6, 28, 496]
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流