225 Tribonacci non-divisors -- v2.pl 901 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 06 May 2017
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=225
  7. # Runtime: 11.433s
  8. use 5.010;
  9. use strict;
  10. use integer;
  11. sub tribonacci {
  12. my ($n, $k, $c) = @_;
  13. $c->{$n} //= $n <= 3 ? 1 : (
  14. tribonacci($n - 1, $k, $c) % $k
  15. + tribonacci($n - 2, $k, $c) % $k
  16. + tribonacci($n - 3, $k, $c) % $k
  17. ) % $k;
  18. }
  19. my $num = 0;
  20. my $nth = 124;
  21. for (my ($c, $k) = (1, 1) ; $c <= $nth ; $k += 2) {
  22. for (my ($n, %cache) = 4 ; ; $n += 3) {
  23. my $t1 = tribonacci($n, $k, \%cache) || last;
  24. my $t2 = tribonacci($n + 1, $k, \%cache) || last;
  25. my $t3 = tribonacci($n + 2, $k, \%cache) || last;
  26. if ($t1 == 1 and $t2 == 1 and $t3 == 1) {
  27. say "$c -> $k";
  28. $num = $k;
  29. $c += 1;
  30. last;
  31. }
  32. }
  33. }
  34. say "Final answer: $num";