diff options
| -rwxr-xr-x | challenge-159/duncan-c-white/perl/ch-2.pl | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/challenge-159/duncan-c-white/perl/ch-2.pl b/challenge-159/duncan-c-white/perl/ch-2.pl index 5df848adf8..ae80d2a6df 100755 --- a/challenge-159/duncan-c-white/perl/ch-2.pl +++ b/challenge-159/duncan-c-white/perl/ch-2.pl @@ -43,8 +43,10 @@ use MakePrimes; use PrimeFactors; my $debug=0; -die "Usage: moebius [--debug] [N] (default 5)\n" - unless GetOptions( "debug"=>\$debug ) && @ARGV<2; +my $tabulate=0; +die "Usage: moebius [--debug] [--tabulate] [N] (default 5)\n" + unless GetOptions( "debug"=>\$debug, "tabulate"=>\$tabulate ) + && @ARGV<2; my $n = shift // 5; @@ -57,7 +59,9 @@ fun moeb( $n ) { my @primes = primes_upto( $n ); - my @factors = prime_factors( $n, @primes ); + my @factors; + @factors = prime_factors( $n, @primes ) if $n>1; + @factors = () if $n==1; my %factorbag; $factorbag{$_}++ for @factors; @@ -86,4 +90,22 @@ fun moeb( $n ) return -1; } -say moeb( $n ); +if( $tabulate ) +{ + my @lines; + my $line = ''; + foreach my $i (1..$n) + { + $line .= sprintf( "%2d: %2d", $i, moeb($i) ); + $line .= ', '; + if( $i % 10 == 0 ) + { + push @lines, $line; + $line = ''; + } + } + say for @lines; +} else +{ + say moeb( $n ); +} |
