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

Fibonacci golden nuggets 题号:137 难度: 50 中英对照

Consider the infinite polynomial series AF(x) = xF1 + x2F2 + x3F3 + ..., where Fk is the kth term in the Fibonacci sequence: 1, 1, 2, 3, 5, 8, ... ; that is, Fk = Fk−1 + Fk−2, F1 = 1 and F2 = 1.

For this problem we shall be interested in values of x for which AF(x) is a positive integer.

Surprisingly AF(1/2)  =  (1/2).1 + (1/2)2.1 + (1/2)3.2 + (1/2)4.3 + (1/2)5.5 + ...
   =  1/2 + 1/4 + 2/8 + 3/16 + 5/32 + ...
   =  2

The corresponding values of x for the first five natural numbers are shown below.

xAF(x)
√2−11
1/22
(√13−2)/33
(√89−5)/84
(√34−3)/55

Solution

考虑如何计算这个无穷求和的级数。 考虑$A_f(x)$和$x\times A_f(x)$以及$x^2 \times A_f(x)$可以得到 $$A_f(x)=\frac{x}{1-x-x^2}$$ 若$A_f(x)$存在(即收敛),那么$A_f(x)$的值满足上式。 设$n=\frac{x}{1-x-x^2}$是整数,则可求解$x$如下: $$x=\frac{-(n+1)\pm \sqrt{(n+1)^2+4n^2}}{2n}$$ 则当$(n+1)^2+4n^2$是完全平方数时,自变量$x$是有理数。 接下来找规律。 首先意识到所求的序列的前五项是: 2,15,104,714,4895,…… 于是规律为: $F(2)F(3)=2$ $F(4)F(5)=215$ $F(6)F(7)=104$ $F(8)F(9)=714$ $F(10)F(11)=4895$ …… 问题得到解决。

Code

public final class p137 {
    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(){
    	int x=15;
    	long f[]=new long [2*x+3];
    	f[0]=0;f[1]=1;f[2]=1;
    	for(int i=3;i<f.length;i++){
    		f[i]=f[i-1]+f[i-2];
    	}
    	return ""+(f[2*x]*f[2*x+1]);
    }

}
1120149658760
0ms