From 3dd6776d41b9e689f49f64a96dcf688ab91ea21e Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 23 Jul 2017 21:45:25 -0400 Subject: problem 357 --- 357.pl | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 357.pl (limited to '357.pl') diff --git a/357.pl b/357.pl new file mode 100755 index 0000000..dd20ab6 --- /dev/null +++ b/357.pl @@ -0,0 +1,32 @@ +#!/usr/bin/perl +use strict; +use warnings; +use 5.014; +use List::Util qw/all/; +use Math::Prime::XS qw/sieve_primes/; +use Math::Factor::XS qw/factors/; + +say "calculating primes..."; +my @primes = sieve_primes(1e8); +my %primes = map { $_, 1 } @primes; +say "done (found " . @primes . " primes)"; + +my $total = 0; + +# handle 2 separately (1 + 1/1 = 2, which is prime) +shift @primes; +$total += 1; + +for my $i (@primes) { + my $n = $i - 1; + # because here we assume odd primes + next unless $primes{2 + $n / 2}; + + my @factors = factors($n); + @factors = @factors[0..(@factors / 2)] if @factors > 0; + if (all { $primes{$_ + $n / $_} } @factors) { + $total += $n; + } +} + +say $total; -- cgit v1.2.3