当前位置:首页 » Project Euler » 详细页

Special isosceles triangles 题号:138 难度: 45 中英对照

Consider the isosceles triangle with base length, b = 16, and legs, L = 17.

By using the Pythagorean theorem it can be seen that the height of the triangle, h = √(172 − 82) = 15, which is one less than the base length.

With b = 272 and L = 305, we get h = 273, which is one more than the base length, and this is the second smallest isosceles triangle with the property that h = b ± 1.

Find ∑ L for the twelve smallest isosceles triangles for which h = b ± 1 and b, L are positive integers.


Solution

关于这个问题有以下两个方程: $$x^2+h^2=L^2$$ $$2x \pm 1 = h$$ 整合为一个得到: $$x^2+(2x\pm 1)^2=L^2$$ 即为: $$5x^2\pm 4x+1=L^2$$ 根据问题100,上式有一个显然的解$x_0=0,L_0=1$,则解的序列为: $$x_{n+1}=-9x_n-4L_n-4$$ $$L_{n+1}=-20x_n-9L_n-8$$ 对于这个解,实际上可以忽略其正负号,把所有的$abs(L_n)$加起来即可。

Code

public final class p138 {
    public static void main(String[] args) {
        long start=System.nanoTime();
        String result = run();        
        long end=System.nanoTime();
        System.out.println(result);
        System.out.println( (end-start)/1000000 + "ms" );
    }
    

    static public String run(){
    	long res=0;
    	long x=0;
    	long y=1;
    	for(int i=0;i<12;i++){
    		long xnew=-9*x-4*y-4;
    		long ynew=-20*x-9*y-8;
    		x=xnew;
    		y=ynew;
    		res+=Math.abs(y);
    	}
    	return ""+res;
    }

}
1118049290473932
0ms