欧拉计划 61

来源:互联网 发布:华为手机设置4g网络 编辑:程序博客网 时间:2024/05/04 19:10

三角形数,四角形数,五角形数,六角形数,七角形数和八角形数都是定形数,他们分别由以下公式产生:

三角形数 P3,n=n(n+1)/2 1, 3, 6, 10, 15, …
四角形数 P4,n=n**2 1, 4, 9, 16, 25, …
五角形数 P5,n=n(3n−1)/2 1, 5, 12, 22, 35, …
六角形数 P6,n=n(2n−1) 1, 6, 15, 28, 45, …
七角形数 P7,n=n(5n−3)/2 1, 7, 18, 34, 55, …
八角形数 P8,n=n(3n−2) 1, 8, 21, 40, 65, …
三个四位数形成的有序集合: 8128, 2882, 8281,有三个有趣的性质:

这个集合是循环的:每个数的后两位数是下一个数的前两位数,包括第三个和第一个的关系。
三种定形数中的每一种都能被这三个数中的一个不同的数代表:
三角形数 (P3,127=8128), 四角形数 (P4,91=8281), 和五角形数 (P5,44=2882)。
这是唯一具有以上性质的四位数的集合。
找出唯一的一个六个四位数的循环集合,使得从三角形数到八角形数中的每一种都能由该集合中的一个不同的数代表。

求这个集合中元素之和。

def is_cyclic(p, pl):    """     递归    遍历查找,首尾相接    """    if len(pl) == 0:        if p[-1][-1] == p[0][0]:            return p        else:            return None    for pl_ in pl:        for pl_p in pl_:            if p[-1][-1] == pl_p[0]:                p_copy = p.copy()                pl_copy = pl.copy()                p_copy.append(pl_p)                pl_copy.remove(pl_)                ps = is_cyclic(p_copy, pl_copy)                if ps:                    return ps    return None# 归纳定形数公式pi_list = []for i in range(3, 9):    pi = []    for n in range(150):        v = n * ((i - 2) * n + (4 - i)) / 2        if v >= 1000 and v <= 10000 and v % 100 > 9:            pi.append((v // 100, v % 100))    pi_list.append(pi)for p8 in pi_list[-1]:    s = is_cyclic([p8], pi_list[:-1])    if s is not None:        breakprint(sum([i * 100 + j for i, j in s]))                
0 0
原创粉丝点击