078 Coin partitions.pl 580 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: https://github.com/trizen
  5. # https://projecteuler.net/problem=78
  6. # Runtime: 8.085s
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. my $n = 1;
  11. my @p = (1);
  12. while (1) {
  13. my $i = 0;
  14. my $q = 1;
  15. push @p, 0;
  16. while ($q <= $n) {
  17. $p[$n] += ($i % 4 > 1 ? -1 : 1) * $p[$n - $q];
  18. $p[$n] %= 1000000;
  19. my $j = int(++$i / 2) + 1;
  20. if ($i % 2 != 0) {
  21. $j *= -1;
  22. }
  23. $q = int($j * (3 * $j - 1) / 2);
  24. }
  25. last if ($p[$n] == 0);
  26. ++$n;
  27. }
  28. say $n;