Combinations with repetitions/Square digit chain: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (Thundergnat moved page Combinations with repetitions/Square Digit Chain to Combinations with repetitions/Square digit chain: Follow normal task title capitalization policy) |
(Added Wren) |
||
Line 491: | Line 491: | ||
#(k=17) in the range 1 to 99999999999999999 |
#(k=17) in the range 1 to 99999999999999999 |
||
#12024696404768024 numbers produce 1 and 87975303595231975 numbers produce 89 |
#12024696404768024 numbers produce 1 and 87975303595231975 numbers produce 89 |
||
</pre> |
|||
=={{header|Wren}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Wren-big}} |
|||
As Wren doesn't have 64 bit integers, it is necessary to use BigInt here to process k = 17. |
|||
<lang ecmascript>import "/big" for BigInt |
|||
var endsWithOne = Fn.new { |n| |
|||
var sum = 0 |
|||
while (true) { |
|||
while (n > 0) { |
|||
var digit = n % 10 |
|||
sum = sum + digit * digit |
|||
n = (n/10).floor |
|||
} |
|||
if (sum == 1) return true |
|||
if (sum == 89) return false |
|||
n = sum |
|||
sum = 0 |
|||
} |
|||
} |
|||
var ks = [7, 8, 11, 14, 17] |
|||
for (k in ks) { |
|||
var sums = List.filled(k * 81 + 1, 0) |
|||
sums[0] = 1 |
|||
sums[1] = 0 |
|||
for (n in 1..k) { |
|||
for (i in n*81..1) { |
|||
for (j in 1..9) { |
|||
var s = j * j |
|||
if (s > i) break |
|||
sums[i] = sums[i] + sums[i-s] |
|||
} |
|||
} |
|||
} |
|||
var count1 = BigInt.zero |
|||
for (i in 1..k*81) if (endsWithOne.call(i)) count1 = count1 + sums[i] |
|||
var limit = BigInt.ten.pow(k) - 1 |
|||
System.print("For k = %(k) in the range 1 to %(limit)") |
|||
System.print("%(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> |
</pre> |
||