projecteuler.net解题记录,参考了肥猫的(第14题)

来源:互联网 发布:gdb调试java 编辑:程序博客网 时间:2024/06/10 07:16
第14题:
Find the longest sequence using a starting number under one million.
根据数学家猜想,对一个任意自然数循环进行如下处理,最后总可以得到1:
如果是偶数: 除以2
否则:乘以3再加上1
找出100万以内,拥有最大步数的自然数。
  1. mark = [0] * 1000000
  2. mark[1] = 1
  3. def collatz(n):
  4.     m = n
  5.     while not (n<1000000 and mark[n]):
  6.         n = n%2 and 3*n+1 or n/2
  7.         mark[m] += 1
  8.     mark[m] += mark[n]
  9.     return mark[m]
  10. min = [0,0]
  11. for i in xrange(1,1000000):
  12.     n = collatz(i)
  13.     if n > min[0]:
  14.         min = n,i
  15. print i,min,max(mark)

我曾尝试了几种算法来想提高速度,但或者收效微乎其微,或者适得其反。可能是因为我没有想出办法来减少循环次数,此次数至少为100万次。


原创粉丝点击