使用Fibonacci序列生成毕达哥拉斯三元组

时间:2014-08-23 19:35:09

标签: java math fibonacci

我正在使用Fibonacci序列根据此页面生成一些毕达哥拉斯三元组(3,4,5等):http://en.wikipedia.org/wiki/Formulas_for_generating_Pythagorean_triples从“广义Fibonacci序列”开始。

public static int fib(int n) {
        if(n == 0) return 0;
        if(n <= 2) return 1;
        int i = 1;
        int temp = 0;

        while(n != 1) {
            i += temp;
            temp = i - temp;
            n--;
        }

        return i;
    }

    public static void main(String[] args) {
        int a = 4; //a(3)
        int b = 3; //b(3)
        int c = 5; //c(3)

        for(int n = 4; n < 10; n++) {
            System.out.println(a + "^2 + " + b + "^2 = " + c + "^2");
            a = a + b + c;
            b = fib((2 * n) - 1) - b;
            c = fib(2 * n);
        }  
    } 

但是,我的程序给出的输出并不准确:

4^2 + 3^2 = 5^2
12^2 + 10^2 = 21^2
43^2 + 24^2 = 55^2
122^2 + 65^2 = 144^2
331^2 + 168^2 = 377^2
876^2 + 442^2 = 987^2

可能导致此问题的原因是什么?我被维基百科欺骗了吗?

1 个答案:

答案 0 :(得分:3)

@MarkDickinson指出公式需要F(1)= 0和F(2)= 1,这与广泛使用的公式不同,其中F(1)= 1且F(2)= 1。解决了我的问题!