Combinations with repetitions/Square digit chain: Difference between revisions

m (→‎{{header|Perl}}: speed up code with Math:AnyNum)
Line 332:
12024696404768024 numbers produce 1 and 87975303595231975 numbers produce 89
</pre>
 
=={{header|Nim}}==
{{trans|Kotlin}}
<lang Nim>import math, strformat
 
func endsWithOne(n: Natural): bool =
var n = n
while true:
var sum = 0
while n > 0:
let digit = n mod 10
sum += digit * digit
n = n div 10
if sum == 1: return true
if sum == 89: return false
n = sum
 
const Ks = [7, 8, 11, 14, 17]
 
for k in Ks:
var sums = newSeq[int64](k * 81 + 1) # Initialized to 0s.
sums[0] = 1
for n in 1..k:
for i in countdown(n * 81, 1):
for j in 1..9:
let s = j * j
if s > i: break
sums[i] += sums[i - s]
 
var count1 = 0i64
for i in 1..k*81:
if i.endsWithOne(): count1 += sums[i]
let limit = 10^k - 1
echo &"For k = {k} in the range 1 to {limit}"
echo &"{count1} numbers produce 1 and {limit - count1} numbers produce 89\n"</lang>
 
{{out}}
<pre>For k = 7 in the range 1 to 9999999
1418853 numbers produce 1 and 8581146 numbers produce 89
 
For k = 8 in the range 1 to 99999999
14255666 numbers produce 1 and 85744333 numbers produce 89
 
For k = 11 in the range 1 to 99999999999
15091199356 numbers produce 1 and 84908800643 numbers produce 89
 
For k = 14 in the range 1 to 99999999999999
13770853279684 numbers produce 1 and 86229146720315 numbers produce 89
 
For k = 17 in the range 1 to 99999999999999999
12024696404768024 numbers produce 1 and 87975303595231975 numbers produce 89</pre>
 
=={{header|Perl}}==
Anonymous user