#! perl use strict; use warnings; use Benchmark 'cmpthese'; use Test::More tests => 1; use constant MAX => 1e4; sub primes_choroba { my $n = shift; return if $n < 2; my @primes = (2); for my $i (3 .. $n) { my $sqrt = sqrt $i; my $notprime; for my $p (@primes) { last if $p > $sqrt; $notprime = 1, last if 0 == $i % $p; } push @primes, $i unless $notprime; } return @primes } sub primes_eliminate { my $n = shift; return if $n < 2; my @primes = (2, 3, 5); for (my $i = 7; $i <= $n; $i += 2) { next if 0 == $i % 5; my $sqrt = sqrt $i; my $notprime; for my $p (@primes) { last if $p > $sqrt; $notprime = 1, last if 0 == $i % $p; } push @primes, $i unless $notprime; } return @primes } is_deeply ( [ primes_choroba (MAX) ], [ primes_eliminate(MAX) ], 'same' ); cmpthese ( -10, { choroba => 'primes_choroba (MAX)', eliminate => 'primes_eliminate(MAX)', } );