triangle_hyperoperation.pl 712 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 16 October 2016
  5. # Website: https://github.com/trizen
  6. # Efficient implementation of the triangle hyperoperation, modulo some n.
  7. # For definition, see:
  8. # https://www.youtube.com/watch?v=sW_IkMQEAwo
  9. # See also:
  10. # https://www.youtube.com/watch?v=9DeOnCKfSuY
  11. use strict;
  12. use integer;
  13. use warnings;
  14. use ntheory qw(powmod forprimes);
  15. sub triangle {
  16. my ($n, $k, $mod) = @_;
  17. return $n if $k == 1;
  18. powmod($n, triangle($n, $k - 1, $mod), $mod);
  19. }
  20. # let z = triangle(10, 10) + 23
  21. # Question: what are the prime factors of z?
  22. forprimes {
  23. my $r = (triangle(10, 10, ${_}) + 23) % ${_};
  24. print "$_ divides z\n" if $r == 0;
  25. } 1e5;