|
发表于 2017-3-10 14:54:43
|
显示全部楼层
- # encoding:utf-8
- # 找出不超过100万的亲和链中的最小元素
- from time import time
- N = 1000000
- l_sums, l_lens = [1] * (2 * N), [0] * (2 * N)
- def getFacSum():
- for i in range(2, N // 2 + 1):
- for t in range(2 * i, N + 1, i):
- l_sums[t] += i
- def euler095():
- getFacSum()
- max_len_nums = set()
- for i in range (1, N + 1):
- s_t , t, flag = list(), i, False
- s_t.append(t)
- while True:
- if l_sums[t] > N + 1:
- break
- if l_sums[t] not in s_t:
- s_t.append(l_sums[t])
- t = l_sums[t]
- else:
- s_t = s_t[s_t.index(l_sums[t]):]
- flag = True
- break
- if flag:
- l_lens[s_t[0]] = len(s_t)
- if len(s_t) > len(max_len_nums):
- max_len_nums = s_t.copy()
- print(max_len_nums)
- print(min(max_len_nums))
- if __name__ == '__main__':
- start = time()
- euler095()
- print('cost %.6f sec' % (time() - start))
复制代码
[14316, 19116, 31704, 47616, 83328, 177792, 295488, 629072, 589786, 294896, 358336, 418904, 366556, 274924, 275444, 243760, 376736, 381028, 285778, 152990, 122410, 97946, 48976, 45946, 22976, 22744, 19916, 17716]
14316
cost 16.423642 sec |
|