104 Pandigital Fibonacci ends.pl 631 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: https://github.com/trizen
  5. # https://projecteuler.net/problem=104
  6. # Runtime: 1.681s
  7. use 5.010;
  8. use strict;
  9. use integer;
  10. use Math::GMPz qw(:mpz);
  11. my $k = 2749;
  12. my $x = Rmpz_init();
  13. my $y = Rmpz_init();
  14. my $t = Rmpz_init();
  15. Rmpz_fib2_ui($x, $y, $k);
  16. while (1) {
  17. Rmpz_set($t, $x);
  18. Rmpz_set($x, ($x + $y) % 10**10);
  19. Rmpz_set($y, $t);
  20. ++$k;
  21. join('', sort split //, substr $x, -9) eq '123456789' && !Rmpz_fib_ui($t, $k) &&
  22. join('', sort split //, substr $t, 0, 9) eq '123456789' && do {
  23. say $k;
  24. last;
  25. };
  26. }