読者です 読者をやめる 読者になる 読者になる

Problem10

euler perl


なんとか10問目。8問目で作った素数判定関数をそのまま利用。
11秒ぐらいかかりましたね。当っているのかな?

#!/usr/bin/perl
use strict;
use warnings;

my @primes;
print "sum of prime number below 2 million is ", p10(2000000), "\n";
# answer is 142913828922

sub p10
{
  my ($limit) = @_;

  push @primes, 2;
  my $i = 3;
  while($i <= $limit){
    is_prime($i);
    $i += 2;
  }
  my $sum = 0;
  map {$sum += $_;} @primes;
  return $sum;
}

sub is_prime
{
  my ($num) = @_;

  for my $i (@primes){
    last if $i ** 2 > $num;
    return 0 if $num % $i == 0;
  }
  push @primes, $num;
  return 1;
}