Нахождение простых чисел
Feb. 14th, 2012 11:42 pmрешето эратосфена (числа не больше данного)
Прямое вычисление (количество чисел):
Ну и сравнение производительности:
Решето:
Прямое вычисление:

# perl -le '@a = ( 2..$ARGV[0] );
while (@a) { my $a = shift @a; $a ? print $a : next;
for (my $i = $a-1; $i < $#a+1; $i += $a) { $a[$i] = 0 } }' 100
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
#
Прямое вычисление (количество чисел):
# perl -le '@a = ( $n = 2 );
n: while ($n++, $#a < $ARGV[0]-1) {
foreach (@a) { next n if ($n%$_ == 0) }
push @a, $n
}
END{ print join "\n", @a }' 25
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
#
Ну и сравнение производительности:
Решето:
Real: 0.35s User: 0.32s System: 0.01s Percent: 97%% Cmd: perl -le 102400Прямое вычисление:
Real: 17.65s User: 17.56s System: 0.00s Percent: 99%% Cmd: perl -le 9805