今天用python写了两个程序,水仙花数和完美数!经典的c练习题!
水仙花数的程序很小,没什么感觉,完美数的程序就复杂一些了!
同学用c写,我用python写,代码几乎是对等翻译!我用的机器cpu主频超过同学的两倍,内存是同学的4倍,就这样,程序运行的时间几乎相同(10w个数据)。。。可想而知,python作为解释型语言,速度上面确实是个巨大的问题!我曾经看到有文章说,就算对解释型语言,python也是其中比较慢的,可怕。。。想象一下运行起来比basic还慢的程序。。。
!疯了!还有就是,python的模板函数运行起来必须带模板的名称!比如开方的函数!
c是这样写:
include<math.h>
sqrt(5);
就行了,直接可以调用sqrt()!
python必须这样写:
import math
math.sqrt(5)
math是必须要加上的,既然已经import math了,为什么还要加呢?不明白!!!
不是一个很方便的东东。。。hoho!
附注1:
水仙花数:各位数字的立方和等于原来的数!
结果:153,370,371,407
完美数:各个因子(素因子及其任意组合乘积,不包括这个数本身,但是包括1)之和等于原来的数!
结果:6,28,496,8128(10万以内)
附注2:
事实上,水仙花数可以扩展为任意位数,不过n位数必须要求是n个数字的n次方和,否则会无解!以下是我的代码,只考虑的计算问题,没有考虑输入的出界问题,比较草!大家批评指正!
n=input('Number of position?')
p=[0]*n
for i in range(pow(10,n-1),pow(10,n)):
k=i
for j in range(0,n):
p[n-j-1]=k%10
k=k/10
sum=0
for j in range(0,n):
sum=sum+pow(p[j],n)
if sum==i:
print i
今天就这么多,明天再继续吧!