Combinations with repetitions/Square digit chain: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→{{header|Perl 6}}: Possibly better work-around for uninitialized warnings) |
SqrtNegInf (talk | contribs) (Added Perl example) |
||
Line 275: | Line 275: | ||
12024696404768024 numbers produce 1 and 87975303595231975 numbers produce 89 |
12024696404768024 numbers produce 1 and 87975303595231975 numbers produce 89 |
||
</pre> |
</pre> |
||
=={{header|Perl}}== |
|||
{{trans|Perl 6}} |
|||
<lang perl>use strict; |
|||
use feature 'say'; |
|||
#use bigint; # un-comment to support the k = 17 case |
|||
sub comma { reverse ((reverse shift) =~ s/(.{3})/$1,/gr) =~ s/^,//r } |
|||
sub endsWithOne { |
|||
my($n) = @_; |
|||
my $digit; |
|||
my $sum = 0; |
|||
my $nn = $n; |
|||
while () { |
|||
while ($nn > 0) { |
|||
$digit = $nn % 10; |
|||
$sum += $digit**2; |
|||
$nn = int $nn / 10; |
|||
} |
|||
return 1 if $sum == 1; |
|||
return 0 if $sum == 89; |
|||
$nn = $sum; |
|||
$sum = 0; |
|||
} |
|||
} |
|||
my @ks = <7 8 11 14>; |
|||
for my $k (@ks) { |
|||
my @sums = <1 0>; |
|||
my $s; |
|||
for my $n (1 .. $k) { |
|||
for my $i (reverse 1 .. $n*81) { |
|||
for my $j (1 .. 9) { |
|||
last if ($s = $j**2) > $i; |
|||
$sums[$i] += $sums[$i-$s]; |
|||
} |
|||
} |
|||
} |
|||
my $count1 = 0; |
|||
for my $i (1 .. $k*81) { $count1 += $sums[$i] if endsWithOne($i) } |
|||
my $limit = 10**$k - 1; |
|||
say "For k = $k in the range 1 to " . comma $limit; |
|||
say comma($count1) . ' numbers produce 1 and ' . comma($limit-$count1) . " numbers produce 89\n"; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>For k = 7 in the range 1 to 9,999,999 |
|||
1,418,853 numbers produce 1 and 8,581,146 numbers produce 89 |
|||
For k = 8 in the range 1 to 99,999,999 |
|||
14,255,666 numbers produce 1 and 85,744,333 numbers produce 89 |
|||
For k = 11 in the range 1 to 99,999,999,999 |
|||
15,091,199,356 numbers produce 1 and 84,908,800,643 numbers produce 89 |
|||
For k = 14 in the range 1 to 99,999,999,999,999 |
|||
13,770,853,279,684 numbers produce 1 and 86,229,146,720,315 numbers produce 89</pre> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |