|
发表于 2017-1-10 13:16:28
|
显示全部楼层
本帖最后由 芒果加黄桃 于 2017-1-10 13:18 编辑
- # encoding:utf-8
- # Collatz问题
- from time import time
- def euler014(N):
- tmp = N
- count = 1
- while tmp > 1:
- count += 1
- if tmp % 2 == 0:
- tmp = int(tmp / 2)
- else:
- tmp = tmp * 3 + 1
- return count
- def euler014_next(num, l_result):
- N = len(l_result)
- t = num * 2
- while t < N and l_result[t] == None:
- l_result[t] = int(l_result[int(t / 2)]) + 1
- t *= 2
- t = num
- if t % 2 != 0 and t * 3 + 1 < N and l_result[t * 3 + 1] == None:
- t = t * 3 + 1
- l_result[t] = l_result[num] - 1
- t *=2
- while t < N and l_result[t] == None:
- l_result[t] = int(l_result[int(t / 2)]) + 1
- t *= 2
-
- if __name__ == '__main__':
- start = time()
- N = 1000000
- l_result = [None] * (N + 1)
- l_result[0],l_result[1] = 0,1
- for i in range(2, N + 1):
- if l_result[i] == None:
- l_result[i] = euler014(i)
- euler014_next(i, l_result)
- print(max(l_result),'--',l_result.index(max(l_result)))
- print('cost %.3f sec' % (time() - start))
复制代码 |
|