prob284-shlomif.p6
Source code: prob284-shlomif.p6
my $BASE = 14; my $MAX = 10000; # $MAX = 9; my @MP; my $ret = 0; sub rec($n, $sq, $is_z, $digits_sum) { if ($n > $MAX) { return; } if ((($sq*$sq) % @MP[$n][1]) != $sq) { return; } if ($sq == 0 and $n > 3) { return; } if (! $is_z) { $ret += $digits_sum; } my $M = @MP[$n]; for 0 .. $BASE - 1 -> $d { rec($n+1, $sq+$M[$d], ($d == 0), $digits_sum+$d); } } @MP[0] = [ 0 .. $BASE - 1]; for 1 .. $MAX + 1 -> $n { @MP.push([map { @MP[*-1][1] * $_ * $BASE }, 0 .. $BASE - 1]); } rec(0, 0, True, 0); sub base14($n) { if $n == 0 { return ''; } else { return base14($n div $BASE) ~ sprintf("%x", $n % $BASE); } } say base14($ret);