#!/usr/bin/perl -w

use Data::Dumper;
use Math::Factoring qw(factor);

foreach my $n (100..999) {
  print $n.' - '.PrintSolidNumberNotation(DS => GetSolidNumberNotationDS(N => $n))."\n";
}

sub GetSolidNumberNotationDS {
  my (%args) = @_;
  my $n = $args{N};
  my @duplicatepile;
  my @solidnumberfactors;
  my $previousfactor = undef;
  foreach my $factor (sort {$a <=> $b} factor($n)) {
    my $skip;
    if (defined $previousfactor) {
      if ($factor eq $previousfactor) {
	push @duplicatepile, $factor;
	$skip = 1;
      }
    }
    unless ($skip) {
      $previousfactor = $factor;
      push @solidnumberfactors, $factor;
    }
  }

  my $total = $solidnumberfactors[0];
  foreach my $i (1..$#solidnumberfactors) {
    $total *= $solidnumberfactors[$i];
  }
  return
    {
     D => \@duplicatepile,
     F => \@solidnumberfactors,
     T => $total,
    };

}

sub PrintSolidNumberNotation {
  my (%args) = @_;
  my $ds = $args{DS};
  my @duplicatepile = @{$ds->{D}};
  my $total = $ds->{T};
  return join('.',@duplicatepile).'.'.$total
}
