076 Counting summations.pl 618 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: https://github.com/trizen
  5. # How many different ways can one hundred be written as a sum of at least two positive integers?
  6. # https://projecteuler.net/problem=76
  7. # Runtime: 0.071s
  8. use 5.010;
  9. use strict;
  10. use Memoize qw(memoize);
  11. memoize('count');
  12. my @nums;
  13. sub count {
  14. my ($n, $i, $sum) = @_;
  15. $i //= 0;
  16. $sum //= 0;
  17. return 1 if ($sum == $n);
  18. return 0 if ($sum > $n);
  19. return 0 if ($i > $#nums);
  20. count($n, $i + 1, $sum) +
  21. count($n, $i, $sum + $nums[$i]);
  22. }
  23. my $n = 100;
  24. @nums = 1 .. $n - 1;
  25. say count(100);