您的位置:首页 > 其它

project euler problem14

2009-09-23 11:25 309 查看
P=lambda n: n %2 ==0 and n/2 or (3*n+1)

dic=dict()

dic[1]=1

i=2

Max=1000000

while i<=Max:

p=i

cnt=0

while p !=1:

if dic.has_key(p):

dic[i] =dic[p]+cnt

break

else :

p=P(p)

cnt +=1

else:

dic[i]=cnt

i +=1

ls=sorted(dic.items(),key=lambda d:d[1])

print ls[Max-1]

the result is 837799

思路:如果N没有计算过,那么循环,直到某个数p已经计算过,令dic
=dic[p]+cnt ; 如果p=1,将dic
=cnt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: