无意中看到介绍水仙花数,即一个3位数的各位数字的3次方和等该数本身
实际上就是自幂数的一种,感觉有点意思,写个脚本试了下
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, time
def deco(func):
def inner(*args, **kwargs):
b_time = time.time()
rlt = func(*args, **kwargs)
e_time = time.time()
print 'elapse:', e_time - b_time
return rlt
return inner
@deco
def daffodilNumber(bit):
rlt = []
start, end = pow(10, bit - 1), pow(10, bit)
for i in range(start, end):
if isDaffodilNumber(i):
rlt.append(i)
return rlt
def isDaffodilNumber(number):
tmp, rlt = 0, False
strNum = str(number)
for i in strNum:
tmp += pow(int(i), len(strNum))
if tmp == number:
rlt = True
return rlt
if '__main__' == __name__:
bit, lp = 0, []
if len(sys.argv) > 1:
bit = int(sys.argv[1])
if bit > 2:
lp = daffodilNumber(bit)
print lp if len(lp) > 0 else None
执行结果:
python daffodilNumber.py 3:
elapse: 0.00112891197205
[153, 370, 371, 407] -- 所谓的水仙花数
python daffodilNumber.py 4:
elapse: 0.0163161754608
[1634, 8208, 9474]
python daffodilNumber.py 5
elapse: 0.187769174576
[54748, 92727, 93084]
python daffodilNumber.py 6
elapse: 2.18345785141
[548834]
python daffodilNumber.py 7
elapse: 25.2082297802
[1741725, 4210818, 9800817, 9926315]
python daffodilNumber.py 8
elapse: 293.154184818
[24678050, 24678051, 88593477]
9位开始就有点慢了。。还没跑出结果,就这样了