当前位置: 首页 > 知识库问答 >
问题:

证明:毕达哥拉斯三重算法用欧几里得公式更快?

薛淮晨
2023-03-14

作为一个类任务,我将编写一个C程序来生成所有低于给定值not'的毕达哥拉斯三元组。下面是我的代码,它首先使用欧几里德公式生成一个原语三元组(a,b,c),并打印形式为1

for (i = 2; i < (sqrt(t) + 1); i++)
    for (j = 1; j < i; j++)
        if ((gcd(i,j) == 1) && ((i-j) % 2) && ((i*i + j*j) < t))
        {
            k = 0;
            a = i * i - j * j;
            b = 2 * i * j;
            c = i * i + j * j;

            while ((++k) * c < t)
                printf("(%d, %d, %d)\n", k*a, k*b, k*c);
        }

我遇到的大多数其他算法使用嵌套循环来检查平方和,并且随着t的增长,速度明显慢于此。有可能推导出一个证明它确实更快的证据吗?

共有1个答案

蒯卓君
2023-03-14

算法复杂度是分析算法性能的一般方法。特别是,大O通常用于基于每一种算法的最坏情况来比较算法。

在您的情况下,您有4个循环:

  • 彻底迭代i
  • 用于
  • 迭代彻底J
  • gcd
  • 内的循环
  • while循环
O(for_i) * O(for_j) * (O(gcd) + O(while))
=
O(sqrt(t)) * O(sqrt(t)) * (O(sqrt(t)) + O(sqrt(t)))
=
O(t*sqrt(t))

 类似资料:
  • 问题来了 找出所有毕达哥拉斯三元组中的1边、2边和斜边都不超过500。使用三重嵌套for循环,尝试各种可能性。 下面是我的尝试 但它没有成功,似乎是一个无限循环。请帮忙。 请注意:我是C语言的新手,我是自学的。而且,这不是家庭作业,我做问题陈述是因为这是表达问题的最佳方式。 编辑 右侧1侧2 运行成功(总时间: 1s) 编辑2 工作代码

  • 本文向大家介绍p5.js 毕达哥拉斯树的实现代码,包括了p5.js 毕达哥拉斯树的实现代码的使用技巧和注意事项,需要的朋友参考一下 本文介绍了p5.js 毕达哥拉斯树的实现代码,分享给大家,具体如下: 效果如下: 主要方法 translate() rotate() rect() push() pop() map() 主要思想 递归 草图 过程分解 一、毕达哥拉斯树的递归函数 二、声明变量、创建画布

  • 本文向大家介绍.欧拉公式相关面试题,主要包含被问及.欧拉公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答:

  • null 我用我在这里找到的公式来生成三元组,从而生成周长。我更喜欢用附加系数“k”的公式,因为文章说, 尽管产生了所有的原语三元组,欧几里德公式并不产生所有的三元组--例如,(9,12,15)不能使用整数m和n产生。这可以通过在公式中插入一个额外的参数k来弥补。 为了在合理的时间内解决这个问题,我需要对嵌套循环中的参数进行合理的限制。我设置了“k”和“m”的限制,您将在后面的完整代码中看到,这两

  • 问题内容: 因此,我正在用Python编写程序以获取任意数量的GCD。 该函数采用数字列表。这应该打印2。但是,我不了解如何递归使用算法,因此它可以处理多个数字。有人可以解释吗? 更新,仍然无法正常工作: 好,解决了 然后使用reduce,就像 问题答案: 由于GCD具有关联性,因此与相同。在这种情况下,Python的函数将是将情况`len(numbers) 2`简化为简单的2数比较的理想选择。代

  • 问题内容: 我在3D中有两点: 我想计算距离: 使用NumPy或一般使用Python的最佳方法是什么?我有: 问题答案: 用途 背后的理论:如数据挖掘导论所述 之所以有效,是因为欧几里得距离为l2范数,并且 中ord参数的默认值为2。