毕达哥拉斯三联体是一个数量关系,如存在三个数满足勾股定理 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 直接通过关系运算 得到
答案:
# 定义函数,寻找毕达哥拉斯三联体组合 deftriplets_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
# 定义函数,将毕达哥拉斯三联体组合,寻找数值范围内的毕达哥拉斯三联体组合 deftriplets_in_range(start, end): triplets = [] for i in range(start, end): x = triplets_with_sum(i) if x: triplets += x return triplets