欧拉计划 12

三角形数序列是由对自然数的连加构造而成的。所以第七个三角形数是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.

那么三角形数序列中的前十个是:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

下面我们列出前七个三角形数的约数:

1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
可以看出28是第一个拥有超过5个约数的三角形数。

那么第一个拥有超过500个约数的三角形数是多少?

def get_divisors(x):"""获取x的约数若 x = x1 * x2,则x的约数为x1和x2的组合"""x_s = {1, x}x_sqrt = int(pow(x, 0.5))for x1 in range(2, x_sqrt + 1):if x % x1 == 0:if x1 not in divisors_dict:get_divisors(x1)x1_s = divisors_dict[x1]x1_s.add(x1)x2 = x // x1if x2 not in divisors_dict:get_divisors(x2)x2_s = divisors_dict[x2]x2_s.add(x2)for i1 in x1_s:for i2 in x2_s:x_s.add(i1 * i2)breakdivisors_dict[x] = x_sreturn x_sn = 500
triangle_num = 1
i = 1
divisors_dict = dict()
while 1:i += 1triangle_num += iif len(get_divisors(triangle_num)) > n:break
print(triangle_num)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部