summaryrefslogtreecommitdiffstats
path: root/357.pl
blob: dd20ab6273035ef8209732ed0926b9a308706727 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;