prime_summation.pl 838 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 28 October 2015
  5. # Website: https://github.com/trizen
  6. # Count how many times an even number can be written as the sum of two or more sub-primes
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. no warnings 'recursion';
  11. use ntheory qw(primes);
  12. use Memoize qw(memoize);
  13. my $limit = 1000;
  14. my $primes = primes(0, $limit);
  15. my %primes;
  16. @primes{@{$primes}} = ();
  17. sub sum_prime {
  18. my ($n) = @_;
  19. my $sum = 0;
  20. foreach my $prime (@{$primes}) {
  21. last if ($prime > ($n / 2));
  22. my $diff = $n - $prime;
  23. if (exists $primes{$diff}) {
  24. $sum += 1 + sum_prime($diff);
  25. }
  26. }
  27. $sum;
  28. }
  29. memoize('sum_prime'); # cache the function to improve performance
  30. for (my $i = 2 ; $i <= $limit ; $i += 2) {
  31. say "$i\t", sum_prime($i);
  32. }