欧拉计划 44

来源:互联网 发布:java 界面开发 编辑:程序博客网 时间:2024/05/17 21:41

五角数通过如下公式定义:Pn=n(3n−1)/2。前十个五角数是:

1, 5, 12, 22, 35, 51, 70, 92, 117, 145, …

可以看出P4 + P7 = 22 + 70 = 92 = P8. 但是它们的差70 − 22 = 48却不是五角数。

找出最小的五角数对Pj 和 Pk,, 使得它们的和与差都是五角数,并且D = |Pk − Pj| 取到最小。这时D的值是多少?

import timedef is_pn(p):    """ 是否五角数 """    n = (1 + pow(1 + 24 * p, 0.5)) / 6    if int(n) == n:        return True    else:        return False# n越大,D = |Pk − Pj|越大t0 = time.time()Pn = lambda n: n * (3 * n - 1) / 2i_pk = 1flag = Truewhile flag:    i_pk += 1    pk = Pn(i_pk)    for i_pj in range(1, i_pk):        pj = Pn(i_pj)        if is_pn(pk - pj):            if is_pn(pk + pj):                flag = False                break    print(pk - pj)t1 = time.time()print(t1 - t0)
0 0
原创粉丝点击