fibonacci_polynomials_closed_form.pl 861 B

12345678910111213141516171819202122232425262728
  1. #!/usr/bin/perl
  2. # Closed-form expression for Fibonacci polynomials:
  3. # Sum_{k=0..n} (fibonacci(k) * x^k)
  4. # Formulas generated by Wolfram|Alpha.
  5. # See also:
  6. # https://projecteuler.net/problem=435
  7. use 5.020;
  8. use strict;
  9. use warnings;
  10. use experimental qw(signatures);
  11. use Math::AnyNum qw(:overload);
  12. sub F1 ($n, $x) {
  13. (2**(-$n-1)*$x*(2*sqrt(5)*(1+sqrt(5))**$n*$x**($n+1)+(5+sqrt(5))*(1+sqrt(5))**$n*$x**$n-2*sqrt(5)*$x*($x-sqrt(5)*$x)**$n-sqrt(5)*($x-sqrt(5)*$x)**$n+5*($x-sqrt(5)*$x)**$n-5*2**($n+1)))/(5*($x**2+$x-1));
  14. }
  15. sub F2 ($n, $x) {
  16. -(2**(2-$n)*(1+sqrt(5))**(-1-$n)*$x*((2*(1+sqrt(5)))**$n*(5+3*sqrt(5))-((-4)**$n*(1+sqrt(5))+2*(1+sqrt(5))**(2*$n)*(2+sqrt(5)))*$x**$n+(3+sqrt(5))*((-4)**$n-(1+sqrt(5))**(2*$n))*$x**(1+$n)))/(sqrt(5)*(1+sqrt(5)+2*$x)*(-2+$x+sqrt(5)*$x));
  17. }
  18. say F1(7, 11); #=> 268357683
  19. say F2(7, 11); #=> =//=