Test if a number is fibonacci

后端 未结 20 951
深忆病人
深忆病人 2020-11-30 17:58

I know how to make the list of the Fibonacci numbers, but i don\'t know how can i test if a given number belongs to the fibonacci list - one way that comes in mind is genera

20条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-30 18:16

    Positive integer ω is a Fibonacci number

    If and only if one of2 + 4 and 5ω2 - 4 is a perfect square

    from The (Fabulous) FIBONACCI Numbers by Alfred Posamentier and Ingmar Lehmann

    bool isFibonacci(int  w)
    {
           double X1 = 5 * Math.Pow(w, 2) + 4;
           double X2 = 5 * Math.Pow(w, 2) - 4;
    
           long X1_sqrt = (long)Math.Sqrt(X1);
           long X2_sqrt = (long)Math.Sqrt(X2);   
    
           return (X1_sqrt*X1_sqrt == X1) || (X2_sqrt*X2_sqrt == X2) ;
    }
    

    I copied it from this source


    Snippet that prints Fibonacci numbers between 1k and 10k.

    for (int i = 1000; i < 10000; i++)
    {
             if (isFibonacci(i))
                  Console.Write(" "+i);
    }
    

    OMG There are only FOUR!!!

    With other method

    from math import *
    
    phi = 1.61803399
    sqrt5 = sqrt(5)
    
    def F(n):
        return int((phi**n - (1-phi)**n) /sqrt5)
    
    def isFibonacci(z):
        return F(int(floor(log(sqrt5*z,phi)+0.5))) == z
    
    print [i for i in range(1000,10000) if isFibonacci(i)]
    

提交回复
热议问题