http://qs1969.pair.com?node_id=1121951


in reply to Number functions I have lying around

Note that the primes subroutine is quite inefficient and returns 1 as well, which is usually not considered prime.

Here's a faster one:

#! /usr/bin/perl use warnings; use strict; use feature qw{ say }; sub primes { 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 } use List::Util qw{ sum }; sub primes_la { # Copy your code here. } use Test::More tests => 1; is_deeply([1, primes(10000)], [primes_la(10000)], 'same'); use Benchmark qw{ cmpthese }; cmpthese(-10, { ch => 'primes(10000)', la => 'primes_la(10000)', }); __END__ 1..1 ok 1 - same s/iter la ch la 1.35 -- -99% ch 1.06e-02 12662% --
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ