123456789101112131415161718192021222324252627 |
- #!/usr/bin/ruby
- # Find the position of a Fibonacci number in the Fibonacci sequence.
- # See also:
- # https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers
- func fibonacci_inverse (n) {
- var m = 5*n*n
- if (is_square(m - 4)) {
- m = isqrt(m - 4)
- }
- elsif (is_square(m + 4)) {
- m = isqrt(m + 4)
- }
- else {
- return -1 # not a Fibonacci number
- }
- log((n*sqrt(5) + m) / 2) / log(Num.phi)
- }
- say fibonacci_inverse(fibonacci(100)) #=> 100
- say fibonacci_inverse(fibonacci(101)) #=> 101
|