Eulerproblem-12 for python

def ext12():
    """
        三角形数序列是由对自然数的连加构造成的。所以第七个三角形数是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 。那么三角形数序列中的
        前十个是:
            1, 3, 6, 10, 15, 21, 28, 36, 45, 55 。。。
        下面是我们列出来的前7个三角形数的约数:
        1 : 1
        3 : 1, 3
        6 : 1, 2, 3
        10 : 1, 2, 5, 10
        15 : 1, 3, 5, 10
        21 : 1, 3, 7, 21
        28 : 1, 2, 4, 7 ,14, 28
        观察10、15、28这几个数的除数,我们可以发现后面一半的除数正好等于该三角数除以前面一半除数,因此我们只需要尝试到int(sqrt(n))
        就可以了。需要注意的地方是如果三角数正好是一个完全平方数,那么除数的数量只能计算1个。


    """
    count = 0
    n = 1
    while count <= 500:
        count = 1
        n += 1
        for i in range(1, int(tri(n) ** 0.5) + 1):
            if not tri(n) % i:
                count += 2
            if int(tri(n) ** 0.5) == tri(n) ** 0.5:
                count -= 1


    print n, tri(n)




def ext13():
    from math import sqrt


    n = 0
    counter = 0
    while counter <= 500:
        counter = 1
        n += 1
        for i in range(1, int(sqrt(tri(n))) + 1):  # 从1尝试到int(sqrt(tri(n)))
            if not tri(n) % i:
                counter += 2


            if int(sqrt(tri(n))) == sqrt(tri(n)):
                counter -= 1
                #   print counter
    print n, tri(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值