diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-01-23 22:51:34 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-23 22:51:34 +0000 |
| commit | a99d14e772a6d5a0269f9f64c27b047313373549 (patch) | |
| tree | 81627415ebd1f0bdfa63169506e57f61ae3210e0 | |
| parent | 86bf193800e00dbaab11e23097b9acb2f8f096a9 (diff) | |
| parent | 388f4e9469ea2003f2cd768f8618f1885320c1e8 (diff) | |
| download | perlweeklychallenge-club-a99d14e772a6d5a0269f9f64c27b047313373549.tar.gz perlweeklychallenge-club-a99d14e772a6d5a0269f9f64c27b047313373549.tar.bz2 perlweeklychallenge-club-a99d14e772a6d5a0269f9f64c27b047313373549.zip | |
Merge pull request #3349 from pauloscustodio/remove_Math_Prime_Util
Replace Math::Prime::Util by explicit prime number generation
| -rw-r--r-- | challenge-008/paulo-custodio/perl/ch-1.pl | 28 | ||||
| -rw-r--r-- | challenge-012/paulo-custodio/perl/ch-1.pl | 27 | ||||
| -rw-r--r-- | challenge-015/paulo-custodio/perl/ch-1.pl | 27 | ||||
| -rw-r--r-- | challenge-076/paulo-custodio/perl/ch-1.pl | 41 |
4 files changed, 118 insertions, 5 deletions
diff --git a/challenge-008/paulo-custodio/perl/ch-1.pl b/challenge-008/paulo-custodio/perl/ch-1.pl index cde823ccf9..9fbbe09470 100644 --- a/challenge-008/paulo-custodio/perl/ch-1.pl +++ b/challenge-008/paulo-custodio/perl/ch-1.pl @@ -11,7 +11,32 @@ use strict; use warnings; use 5.030; -use Math::Prime::Util 'next_prime', 'is_prime'; + +# check if number is prime +sub is_prime { + my($n) = @_; + + return 0 if $n <= 1; + return 1 if $n <= 3; + + return 0 if ($n % 2)==0 || ($n % 3)==0; + + for (my $i = 5; $i*$i <= $n; $i += 6) { + return 0 if ($n % $i)==0 || ($n % ($i+2))==0; + } + + return 1; +} + +# next prime +sub next_prime { + my($n) = @_; + + return 2 if $n <= 1; + my $p = $n; + 1 while !is_prime(++$p); + return $p; +} # Euclid proved that 2^(pā1)*(2^p ā 1) is an even perfect number # whenever 2p ā 1 is prime @@ -27,6 +52,7 @@ sub perfect_iter { } +# main my $n = shift || 5; my $iter = perfect_iter(); for (1..$n) { diff --git a/challenge-012/paulo-custodio/perl/ch-1.pl b/challenge-012/paulo-custodio/perl/ch-1.pl index 0bd11f659d..411ed1e154 100644 --- a/challenge-012/paulo-custodio/perl/ch-1.pl +++ b/challenge-012/paulo-custodio/perl/ch-1.pl @@ -11,7 +11,32 @@ use strict; use warnings; use 5.030; -use Math::Prime::Util 'next_prime', 'is_prime'; + +# check if number is prime +sub is_prime { + my($n) = @_; + + return 0 if $n <= 1; + return 1 if $n <= 3; + + return 0 if ($n % 2)==0 || ($n % 3)==0; + + for (my $i = 5; $i*$i <= $n; $i += 6) { + return 0 if ($n % $i)==0 || ($n % ($i+2))==0; + } + + return 1; +} + +# next prime +sub next_prime { + my($n) = @_; + + return 2 if $n <= 1; + my $p = $n; + 1 while !is_prime(++$p); + return $p; +} sub euclid_iter { my $prime = 1; diff --git a/challenge-015/paulo-custodio/perl/ch-1.pl b/challenge-015/paulo-custodio/perl/ch-1.pl index 655124d8bb..59e37ef0d0 100644 --- a/challenge-015/paulo-custodio/perl/ch-1.pl +++ b/challenge-015/paulo-custodio/perl/ch-1.pl @@ -19,7 +19,32 @@ use strict; use warnings; use 5.030; -use Math::Prime::Util 'next_prime'; + +# check if number is prime +sub is_prime { + my($n) = @_; + + return 0 if $n <= 1; + return 1 if $n <= 3; + + return 0 if ($n % 2)==0 || ($n % 3)==0; + + for (my $i = 5; $i*$i <= $n; $i += 6) { + return 0 if ($n % $i)==0 || ($n % ($i+2))==0; + } + + return 1; +} + +# next prime +sub next_prime { + my($n) = @_; + + return 2 if $n <= 1; + my $p = $n; + 1 while !is_prime(++$p); + return $p; +} sub prime_iter { my($strong) = @_; diff --git a/challenge-076/paulo-custodio/perl/ch-1.pl b/challenge-076/paulo-custodio/perl/ch-1.pl index 99a25bb519..5619acd725 100644 --- a/challenge-076/paulo-custodio/perl/ch-1.pl +++ b/challenge-076/paulo-custodio/perl/ch-1.pl @@ -22,7 +22,6 @@ use warnings; use 5.030; use Math::Combinatorics; use List::Util 'sum'; -use Math::Prime::Util 'primes'; my($N) = shift; @@ -35,13 +34,51 @@ else { } +# check if number is prime +sub is_prime { + my($n) = @_; + + return 0 if $n <= 1; + return 1 if $n <= 3; + + return 0 if ($n % 2)==0 || ($n % 3)==0; + + for (my $i = 5; $i*$i <= $n; $i += 6) { + return 0 if ($n % $i)==0 || ($n % ($i+2))==0; + } + + return 1; +} + +# next prime +sub next_prime { + my($n) = @_; + + return 2 if $n <= 1; + my $p = $n; + 1 while !is_prime(++$p); + return $p; +} + +# get all primes up to N +sub primes { + my($n) = @_; + my $p = 2; + my @primes; + while ($p <= $n) { + push @primes, $p; + $p = next_prime($p); + } + return @primes; +} + # check all combinations for the shortest that adds up to N sub find_set { my($n) = @_; # get all primes up to N, 1 not included; # append primes 2 and 3 to be able to solve special cases 4 and 6 - my @primes = (@{primes($n)}, 2, 3); + my @primes = (primes($n), 2, 3); my @solution; for my $k (1 .. scalar(@primes)) { |
