我写了一个程序,必须找到欧拉问题的解决方案。我想训练我的程序技巧,这就是为什么我已经签署了欧盟。我可以使关于EulerProblem的代码更快吗?
这就是问题:
甲勾股数是一组三个自然数,一个< b <的C,为此, 一个^ 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;
}
是否有可能使代码更快或者是正常的,它需要时间?
亲切的问候,
编辑:
感谢您的帮助。 !测试布尔是无用的抱歉,这工作:这个作品:
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;
}
我也写了一个haskell变种,也是伎俩。
认为这在Haskell中更容易,效率更高。
Thaks的提示。
为什么使用'!test'作为循环控制表达式? – 2012-02-18 10:45:15
也许你可以接受你过去的问题的一些答案。 – Coren 2012-02-18 10:45:17
你不会打破最内层的循环,所以它永远循环一次= 1,b = 2。 – soulcheck 2012-02-18 10:45:43