完美数字
问题描述:
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如,第一个完全数是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。
Solution (other’s)
def isPerfectNumber(n):
a = 1
b = n
s = 0
while a < b:
if n % a == 0:
s += a + b
a += 1
b = n / a
if a == b and a * b == n:
s += a
return s - n == n
for k in range(2, 10000):
if isPerfectNumber(k):
print k
上面的程序是其他人的解法,有点复杂,自己编的在下面。
Solution (mine):
def perfectnumber(n): #定义函数
a=[] #定义一个用于放约数的空数组(注意,定义在函数外面会出错)
for i in range(1,n):
if n%i==0:
a.append(i) #将所有约数添加到a数组中
return sum(a)==n #所有约数求和若等于n
for b in range(1,10000):
if perfectnumber(b):
print b
6
28
496
8128
这几天在学习《机器学习实战》,kNN,决策树和朴素贝叶斯已经看了,原理都很容易理解,代码开始很费劲但是边学边查也能看得懂了,不过真的自己敲还是有难度。感悟就是,程序虽然看上去密密麻麻,但是可以变得井井有条,一个个函数块的创建和调用,可以瞬间让你思路清晰。语言真的很神奇,学好一门语言需要逻辑清晰有条理,这些是一种思维方式、习惯,要体会、要培养。
第一遍不细究代码,重点看各种算法的原理。自己敲代码的时候一定来这做笔记!