我需要快速提示以下练习题:
编写一个程序,生成所有毕达哥拉斯三元组,其小边不大于n。尝试使用n <= 200。
什么是“不等于n”?
运动来源:解剖学的Java(Ira Pohl和Charlie McDowell)
注意:我发现看起来非常好post on pythagorean triples但我不会读它,因为它可能会破坏我自己解决这个问题的尝试....
修改
如果n是小边a的长度,我们说:n是5; 然后我需要检查所有三元组a = 1,a = 2,a = 3,a = 4,a = 5 并找到毕达哥拉斯三元组的案例
这个额外条件有什么用呢?
编辑2
如果我向你展示一个实用的部分,也许我会更接近......所以这里有一小段(python)代码可以返回几个三元组。我已经将外循环的上限设置为20(现在我看不到'n'的任何其他用途)以保持其对该帖子的管理。
import math
for b in range(20):
for a in range(1, b):
c = math.sqrt( a * a + b * b)
if c % 1 == 0:
print (a, b, int(c))
返回
(3,4,5) (6,8,10) (5,12,13) (9,12,15) (8,15,17) (12,16,20)
是所需的输出?我错过了什么步骤?
提前致谢
巴巴
答案 0 :(得分:2)
no larger than n
表示您获得了一个整数n
,并且必须生成所有可能的整数三倍a b c
,以a <= n, b <= n
和a^2 + b^2 = c^2
。
答案 1 :(得分:1)
这个问题只是意味着如果我们假设'a','b'和'c'作为三角形的边和'c'是斜边的,那么'a'和'b'都应该小于'n'。
即。 a&lt; = n且b&lt; = n
答案 2 :(得分:1)
有无数的毕达哥拉斯三元组。因此,如果不在生成的三元组上放置边界,则程序无法在有限时间内完成任务。所以我们必须以某种方式限制所需的输出。关于所提供的界限是否适用于最短腿或双腿,似乎存在分歧。在这里,我们表明,限制最短的腿意味着另一条腿的界限。
我们可能会a <= b < c
。由于我们知道sqrt(2)是不合理的,我们可以消除a = b,离开a < b < c
的可能性。因为在毕达哥拉斯三元组中我们有a^2 + b^2 = c^2
而a不是零,c >= b+1
(即c至少与c可能的最小值一样大)。将c设置为与此边界一样小,我们得到a^2 + b^2 = c^2 >= (b+1)^2
,这意味着a^2 >= 2b+1
或b <= (a^2 - 1)/2
。
因此,a上的约束也是b上的约束(因此也是c)。详细而言,如果我们需要a <= n
,那么我们需要b <= (n^2 - 1)/2
。我们可以进一步推断c^2 <= n^2 + (n^2 - 1)^2/4
。
c上的界限非常宽松,所以我不建议在c上循环,然后过滤掉太大的三角形。
答案 3 :(得分:0)
只存在有限数量的PT,其中最长边小于200“单位”,因此您可以遍历三边的每一边,整数列表从1到200(有一些基本的测试加快过程 - 这是练习 - 如果他们是PT - 那么你找到一个(记得忽略欺骗)。
答案 4 :(得分:0)
毕达哥拉斯三元组可以使用相当简单的公式自动生成。以下是一些讨论的网页:
另外,关于澄清“哪个小方面不大于n”的问题。假设三元组是(A,B,C),其中A <1。 B&lt; C.(C是hypoteneuse,A是短边,B是长边)
然后我会将要求解释为找到所有三元组,使得A <= n。 (B和C可能大于n)。这个问题应该更明确,并说“最短边”(“最短”优于“最小”)或明确地称为A和/或B.