#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw/sum/;
sub divisors {
my $num = shift;
my @divisors = grep { $num % $_ == 0 } 1 .. sqrt($num);
push @divisors, map { $num == $_*$_ ? () : $num/$_} reverse @divisors;
return @divisors
}
sub SDD {
my $num = shift;
my @divisors = divisors($num);
my @digits = map { split q{}, $_ } @divisors;
return sum(@digits);
}
sub SDDn {
my $num = shift;
my $indent = shift || 0;
my $SDD = SDD($num);
print " " x $indent, "SDD($num) => $SDD\n";
if ($SDD != 15) {
SDDn($SDD, $indent + 3);
}
}
for my $start (2..100000) {
SDDn($start);
}