Unix 查找给定范围内的勾股三元组数
我正试图编写一个程序,打印给定范围N的毕达哥拉斯三元组(a^2+b^2=c^2),其中a首先,只要有新的Unix 查找给定范围内的勾股三元组数,unix,c++,c,Unix,C++,C,我正试图编写一个程序,打印给定范围N的毕达哥拉斯三元组(a^2+b^2=c^2),其中a首先,只要有新的c值可用,就可以计算c2: for (c = 0; c <=N; c++) { /* compute c2 here */ 对于(c=0;c您可以通过以下计算减少一个变量 a = m^2 - n^2, b = 2mn, c = m^2 + n^2 让我们检查它是否满足a^2+b^2=c^2: a^2+b^2 = (m^2 - n^2)^2 + (2mn)^2 = (m
c
值可用,就可以计算c2
:
for (c = 0; c <=N; c++)
{
/* compute c2 here */
对于(c=0;c您可以通过以下计算减少一个变量
a = m^2 - n^2, b = 2mn, c = m^2 + n^2
让我们检查它是否满足a^2+b^2=c^2
:
a^2+b^2 = (m^2 - n^2)^2 + (2mn)^2 = (m^2 + n^2)^2 = c^2.
现在,我们可以迭代所有可能的m
和n
,并生成相应的a
,b
,c
这是我用过的最快的方法。但是,我不知道是否存在任何O(1)
或O(log(n))
数学解。根据数论,毕达哥拉斯三元组的参数是(2pq,p^2-q^2,p^2+q^2)。你可以枚举这些,只要c>N就中止。这当然是最优的,因为你做的计算和三元组一样多…a)这是Stackoverflow的问题。b) 欧拉项目?…或者最好不要这样,因为它也可以在那里关闭。@deviantfan。。为什么它会在S/O关闭??只是好奇。。。这似乎是一个合法的编程问题,除非我真的很蠢并且遗漏了一些东西,因为:a
,b
,c
中的一次2的可能重复是固定的,最后一次可以直接计算而不需要循环。(在你的例子中,a*a=c*c-b*b
)
a^2+b^2 = (m^2 - n^2)^2 + (2mn)^2 = (m^2 + n^2)^2 = c^2.