分享

Python 欧拉计划第 9 题:毕达哥拉斯三联体

 知识情报院 2022-02-21

问题:

毕达哥拉斯三联体是一个数量关系,如存在三个数满足勾股定理 a,b,c + = ,同时有a < b < c;

例如: + = 9 + 16 = 25 =

现给定一个整数 N,求出当a + b + c = N的所有毕达哥拉斯三联体组合


分析:

  • 首先存在如下关系,a < b < c < N, a 只能从 1 开始,向 N 遍历循环
  • 但是 a 应该小于等于 N/3,因为 a * 3 < a + b + c
  • b 应该 大于 a ,但是因为 b < c,所以,b 应该小于 N/2
  • c 直接通过关系运算 得到

答案:

# 定义函数,寻找毕达哥拉斯三联体组合
def triplets_with_sum(number):
    triplets = []
    a = 0
    triplet_sum = 0
    while a < number/3:
        a += 1
        bmax = int(number / 2)
        for b in range(a,bmax):
            c = (a**2 + b**2)**0.5
            triplet_sum = a + b + c
            if triplet_sum == number:
                triplets.append([a,b,c])
    return triplets

# 定义函数,将毕达哥拉斯三联体组合,寻找数值范围内的毕达哥拉斯三联体组合
def triplets_in_range(start, end):
    triplets = []
    for i in range(start, end):
        x = triplets_with_sum(i)
        if x:
            triplets += x
    return triplets

# 定义函数,判断输入的元组是否满足勾股数
def is_triplet(triplet):
    return triplet[0]**2 + triplet[1]**2 == triplet[2]**2

if __name__ == "__main__":

    print(is_triplet((1,2,3)))
    print(triplets_with_sum(1000))
    print(triplets_in_range(10,100))
False
[[200375425.0]]
[[345.0], [6810.0], [51213.0], [91215.0], [81517.0], [121620.0], [72425.0], [102426.0], [152025.0], [202129.0], [182430.0], [163034.0], [123537.0], [212835.0], [94041.0], [153639.0], [243240.0]]


今天的教程,主要学习了:如何使用 Python 来寻找毕达哥拉斯三联体组合数;大家都学会了吗?

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多