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

我能让这个功能更高效吗(欧拉项目9号)?

后星河
2023-03-14
A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
a^2 + b^2 = c^2

For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.

There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.
public static int specPyth(int num)
{
    for (int a = 1; a < num; a++)
        for (int b = 2; b < a; b++)
            {
                if (a*a +b*b == (num-a-b)*(num-a-b))
                    return a*b*(num-a-b); //ans = 31875000 
            }

    return -1;
}

我不禁想到,有一个解决方案只涉及一个循环。有人有想法吗?我更喜欢只使用一个循环的答案,但任何比我目前的效率更高的都是很好的。

共有1个答案

有权
2023-03-14
if a + b +c = 1000

然后

 a + b + sqroot(a² + b²) = 1000

 -> (a² + b²) = (1000 - a - b)²

 -> a² + b² = 1000000 - 2000*(a+b) + a² + 2*a*b + b²

 -> 0 = 1000000 - 2000*(a+b) + 2*a*b

 -> ... (easy basic maths)

 -> a = (500000 - 1000*b) / (1000 - b)

然后你尝试每一个b,直到你找到一个使a成为自然数。

public static int specPyth(int num)
    {
        double a;
        for (int b = 1; b < num/2; b++)
        {
            a=(num*num/2 - num*b)/(num - b);

            if (a%1 == 0)
                return (int) (a*b*(num-a-b));
        }   

        return -1;
    }

编辑:b不能高于499,因为C>b和(b+C)将高于1000。

 类似资料:
  • 13195的主要因子为5、7、13和29。数字600851475143中最大的素因子是什么? 我用自己的方式在Euler项目上解决了这个问题,速度很慢,然后我在某人的github帐户上找到了这个解决方案。我不明白为什么它会起作用。为什么删除了许多因子,这些因子等于一个指数?有什么见解吗?

  • 我有一个并发哈希映射,我需要在其中更新循环中的值。虽然,并发映射本身是线程安全的,但添加操作不是原子的,因此我需要添加同步块。如果我在这里错了,请纠正我。 问题是是否可以使用锁等更有效地同步此代码?我正在从阻塞队列中获取值。 这是代码:

  • 问题内容: 我的问题是: 据我所知,这取决于如何使用,即用作构造函数或函数。可什么是在不同的情况下? 问题答案: 的关键字是指功能所属的对象,或对象如果函数不属于任何对象。 在OOP代码中使用它来引用该函数所属的类/对象,例如: 这提醒: 您可以使用或函数操纵引用的对象。 (有时非常方便)

  • 这是我当前的代码: 我一辈子都不知道如何旋转这个。我看了其他几个论坛,但没有其他机构讨论这个问题。 据我所知,没有办法旋转JPanel或JFrame,所以我运气不好吗? 这就是它现在的样子: 数字时钟 我想把它旋转90度。基本上是垂直的。 编辑:解决方案:

  • 我正在尝试创建一个类似于以下内容的项目结构: 此外,我们希望避免使用require将所有函数拉到一个index.js文件中。

  • 我一直在四处寻找,试图自学流媒体api。我制作了几个类,列出了宠物的arraylist,有一个抽象的方法来显示宠物的声音,这两个表达式分开使用效果很好 但我想看看是否可以将它们组合成一行代码,这样在列表打印出来之后,它就会打印出声音。我想完成的事情有参考代码吗?