diff options
| author | Stephen Lynn <bizlsg@localhost.localdomain> | 2022-06-11 21:03:20 +0800 |
|---|---|---|
| committer | Stephen Lynn <bizlsg@localhost.localdomain> | 2022-06-11 21:03:20 +0800 |
| commit | 3d271507b2ad90a357fb128df8fcf47b66f91ffb (patch) | |
| tree | 0056eed26aab645e86e0f8f8b5bb4444e0c97cf5 | |
| parent | bf717b19d8279f0a9b908d1f465a821d43f3eb55 (diff) | |
| download | perlweeklychallenge-club-3d271507b2ad90a357fb128df8fcf47b66f91ffb.tar.gz perlweeklychallenge-club-3d271507b2ad90a357fb128df8fcf47b66f91ffb.tar.bz2 perlweeklychallenge-club-3d271507b2ad90a357fb128df8fcf47b66f91ffb.zip | |
improved perl ch-2.pl
| -rwxr-xr-x | challenge-168/steve-g-lynn/perl/ch-2.pl | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/challenge-168/steve-g-lynn/perl/ch-2.pl b/challenge-168/steve-g-lynn/perl/ch-2.pl index d1f6f0aced..4732c9b136 100755 --- a/challenge-168/steve-g-lynn/perl/ch-2.pl +++ b/challenge-168/steve-g-lynn/perl/ch-2.pl @@ -1,13 +1,17 @@ #!/usr/bin/perl -use Math::Prime::XS qw(is_prime sieve_primes); - +use Math::Prime::XS qw(is_prime); +print &home_prime(10),"\n"; +#773 print &home_prime(16),"\n"; -#-- should be 31636373 [wikipedia example] +#31636373 +print &home_prime(20),"\n"; +#3318308475676071413 sub home_prime { - local ($n)=@_; + my ($n)=@_; + is_prime($n) && return $n; while (1){ $n=&factors($n); (is_prime($n)) && last; @@ -18,20 +22,25 @@ sub home_prime { sub factors { #--return concatenated prime factors of a number n - local ($n)=@_; - local @primes=sieve_primes($n); - local $retstring=""; + my ($n)=@_; + local $sqrt_n=int(sqrt($n)); + + my $retstring=""; if (is_prime($n)){ return $n; } else { - foreach $prime (sort{$a<=>$b} @primes){ + for $prime (2 .. $sqrt_n){ + #-- no need to get primes first + #-- routine automatically finds only prime factors while ( ($n % $prime) == 0){ $n /= $prime; $retstring .= $prime; } + (is_prime($n)) && last; } + ($n > 1) && ($retstring .= $n); } return $retstring; } |
