119 Digit power sum.pl 719 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 18 May 2017
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=119
  7. # Runtime: 0.258s
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use List::Util qw(sum);
  12. use Math::AnyNum qw(ipow);
  13. my $nth = 30;
  14. my @terms;
  15. my $prev = 0;
  16. for (my $n = 1 ; ; ++$n) {
  17. foreach my $k (1 .. $n) {
  18. if ($k * log($n) >= log(10) and sum(split(//, ipow($n, $k))) == $n) {
  19. push @terms, ipow($n, $k);
  20. say "$n -> $n^$k -> ", ipow($n, $k);
  21. }
  22. }
  23. @terms = sort { $a <=> $b } @terms;
  24. if (@terms >= 2 * $nth) {
  25. $terms[$nth - 1] == $prev and last;
  26. $prev = $terms[$nth - 1];
  27. }
  28. }
  29. say $terms[$nth - 1];