sieve_of_eratosthenes.pl 713 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 18 May 2017
  5. # https://github.com/trizen
  6. # A simple implementation of the sieve of Eratosthenes for prime numbers.
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. sub sieve_primes {
  11. my ($n) = @_;
  12. my @composite;
  13. foreach my $i (2 .. CORE::sqrt($n)) {
  14. if (!$composite[$i]) {
  15. for (my $j = $i**2 ; $j <= $n ; $j += $i) {
  16. $composite[$j] = 1;
  17. }
  18. }
  19. }
  20. my @primes;
  21. foreach my $p (2 .. $n) {
  22. $composite[$p] // push(@primes, $p);
  23. }
  24. return @primes;
  25. }
  26. my $n = shift(@ARGV) // 100;
  27. my @primes = sieve_primes($n);
  28. say join(' ', @primes);
  29. say "PI($n) = ", scalar(@primes);