use*_*522 1 java algorithm performance
我编写了一个必须找到EulerProblem解决方案的程序.我想训练我的程序技能,这就是我注册欧拉的原因.
这就是问题:
毕达哥拉斯三元组是一组三个自然数,a <b <c,其中a ^ 2 + b ^ 2 = c ^ 2
例如,3 ^ 2 + 4 ^ 2 = 9 + 16 = 25 = 5 ^ 2.
恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc.
这是我的代码,但它运行缓慢,需要几个小时给我正确的abc.
static int findTriplet(int getal)
{
boolean test = false;
for(int a = 1; !test; a++)
for(int b = a+1; !test; b++)
for(int c = b+1; !test; c++)
{
if( a*a + b*b == c*c)
{
if(a+b+c == getal)
{
return (a*b*c);
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使代码更快或者是否需要数小时?
亲切的问候,
编辑:
谢谢你的帮助.!test boolean对此无效,这很有效:
static int findTriplet(int getal)
{
for(int a = 1; a < 1000; a++)
for(int b = a+1; b < 1000; b++)
for(int c = b+1; c < 1000; c++)
{
if( a*a + b*b == c*c)
{
if(a+b+c == getal)
{
return (a*b*c);
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我还写了一个haskell变体,也可以做到这一点.
认为这在Haskell中更容易,效率更高.
想要提示.
为了优化这种天真的算法,您首先要了解:
false.你也冒险遇到溢出c.现在,你知道你需要:
以下是一些易于优化的提示:
以及一些更难以优化的提示: