欧拉项目(python练习)problem 45

# -*- coding:utf8 -*-

import sys
from math import sqrt

#题目设置
'''三角数,五角数和六角数分别通过以下公式定义:

三角数		Tn=n(n+1)/2		1, 3, 6, 10, 15, ...
五角数		Pn=n(3n−1)/2		1, 5, 12, 22, 35, ...
六角数		Hn=n(2n−1)		1, 6, 15, 28, 45, ...
可以证实 T285 = P165 = H143 = 40755.

找出这之后的下一个既是五角数又是六角数的三角数。'''

#解题思路:n值相同情况下,六角数数值最大,所以从第144个六角数开始寻找,判断之后的六角数是否为三角数和五角数,找到后返回即可

class RequiredTriangleNumber():                               #定义了一个找到要求的三角数的类

    def __init__(self):
        pass
        
    def judge_whether_triangle(self , number):                #定义了一个方法,判断一个数字是否为三角数,通过反解n判断是否为整数即可
        if ((sqrt(8 * number + 1) - 1) / 2) % 1 == 0:   
            return True
            
    def judge_whther_pentagonal(self , number):               #同上,判断是否为五角数
        if ((sqrt(24 * number + 1) + 1) / 6) % 1 == 0:        
            return True

    def find_next_number(self , hexagonal_number_position):   #主方法,寻找下一个数,参数为从这个n值的六角数开始寻找
        while(True):
            hexagonal_number = hexagonal_number_position * (2 * hexagonal_number_position - 1)
            if self.judge_whether_triangle(hexagonal_number) and self.judge_whther_pentagonal(hexagonal_number):
                return hexagonal_number
            hexagonal_number_position = hexagonal_number_position + 1

if __name__ == "__main__":
    required_triangle_number = RequiredTriangleNumber()
    print required_triangle_number.find_next_number(144)



运行结果:1533776805

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值