365 A huge binomial coefficient -- v2.pl 899 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 04 September 2020
  4. # https://github.com/trizen
  5. # https://projecteuler.net/problem=365
  6. # See also:
  7. # https://en.wikipedia.org/wiki/Lucas%27s_theorem
  8. # Runtime: ~6 minutes.
  9. use 5.020;
  10. use strict;
  11. use warnings;
  12. use experimental qw(signatures);
  13. use ntheory qw(primes chinese binomialmod);
  14. my @primes = @{primes(1000, 5000)};
  15. my $end = $#primes;
  16. my $N = 1000000000000000000;
  17. my $K = 1000000000;
  18. my $sum = 0;
  19. foreach my $i (0 .. $end - 2) {
  20. my $first = [binomialmod($N, $K, $primes[$i]), $primes[$i]];
  21. foreach my $j ($i + 1 .. $end - 1) {
  22. my $second = [binomialmod($N, $K, $primes[$j]), $primes[$j]];
  23. foreach my $k ($j + 1 .. $end) {
  24. my $third = [binomialmod($N, $K, $primes[$k]), $primes[$k]];
  25. $sum += chinese($first, $second, $third);
  26. }
  27. }
  28. say "$i -> $sum";
  29. }
  30. say "Total: $sum";