Stirling numbers of the second kind: Difference between revisions
Content added Content deleted
Line 759: | Line 759: | ||
7769730053598745155212806612787584787397878128370115840974992570102386086289805848025074822404843545178960761551674 |
7769730053598745155212806612787584787397878128370115840974992570102386086289805848025074822404843545178960761551674 |
||
</pre> |
</pre> |
||
=={{header|Kotlin}}== |
|||
{{trans|Java}} |
|||
<lang scala>import java.math.BigInteger |
|||
fun main() { |
|||
println("Stirling numbers of the second kind:") |
|||
val max = 12 |
|||
print("n/k") |
|||
for (n in 0..max) { |
|||
print("%10d".format(n)) |
|||
} |
|||
println() |
|||
for (n in 0..max) { |
|||
print("%-3d".format(n)) |
|||
for (k in 0..n) { |
|||
print("%10s".format(sterling2(n, k))) |
|||
} |
|||
println() |
|||
} |
|||
println("The maximum value of S2(100, k) = ") |
|||
var previous = BigInteger.ZERO |
|||
for (k in 1..100) { |
|||
val current = sterling2(100, k) |
|||
previous = if (current > previous) { |
|||
current |
|||
} else { |
|||
println("%s%n(%d digits, k = %d)".format(previous, previous.toString().length, k - 1)) |
|||
break |
|||
} |
|||
} |
|||
} |
|||
private val COMPUTED: MutableMap<String, BigInteger> = HashMap() |
|||
private fun sterling2(n: Int, k: Int): BigInteger { |
|||
val key = "$n,$k" |
|||
if (COMPUTED.containsKey(key)) { |
|||
return COMPUTED[key]!! |
|||
} |
|||
if (n == 0 && k == 0) { |
|||
return BigInteger.valueOf(1) |
|||
} |
|||
if (n > 0 && k == 0 || n == 0 && k > 0) { |
|||
return BigInteger.ZERO |
|||
} |
|||
if (n == k) { |
|||
return BigInteger.valueOf(1) |
|||
} |
|||
if (k > n) { |
|||
return BigInteger.ZERO |
|||
} |
|||
val result = BigInteger.valueOf(k.toLong()) * sterling2(n - 1, k) + sterling2(n - 1, k - 1) |
|||
COMPUTED[key] = result |
|||
return result |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Stirling numbers of the second kind: |
|||
n/k 0 1 2 3 4 5 6 7 8 9 10 11 12 |
|||
0 1 |
|||
1 0 1 |
|||
2 0 1 1 |
|||
3 0 1 3 1 |
|||
4 0 1 7 6 1 |
|||
5 0 1 15 25 10 1 |
|||
6 0 1 31 90 65 15 1 |
|||
7 0 1 63 301 350 140 21 1 |
|||
8 0 1 127 966 1701 1050 266 28 1 |
|||
9 0 1 255 3025 7770 6951 2646 462 36 1 |
|||
10 0 1 511 9330 34105 42525 22827 5880 750 45 1 |
|||
11 0 1 1023 28501 145750 246730 179487 63987 11880 1155 55 1 |
|||
12 0 1 2047 86526 611501 1379400 1323652 627396 159027 22275 1705 66 1 |
|||
The maximum value of S2(100, k) = |
|||
7769730053598745155212806612787584787397878128370115840974992570102386086289805848025074822404843545178960761551674 |
|||
(115 digits, k = 28)</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |