summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x357.pl32
1 files changed, 32 insertions, 0 deletions
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;