Self numbers: Difference between revisions
Content added Content deleted
Line 905: | Line 905: | ||
16.999383 seconds (42.92 k allocations: 9.595 GiB, 0.01% gc time) |
16.999383 seconds (42.92 k allocations: 9.595 GiB, 0.01% gc time) |
||
</pre> |
</pre> |
||
=={{header|Kotlin}}== |
|||
{{trans|Java}} |
|||
<lang scala>private const val MC = 103 * 1000 * 10000 + 11 * 9 + 1 |
|||
private val SV = BooleanArray(MC + 1) |
|||
private fun sieve() { |
|||
val dS = IntArray(10000) |
|||
run { |
|||
var a = 9 |
|||
var i = 9999 |
|||
while (a >= 0) { |
|||
for (b in 9 downTo 0) { |
|||
var c = 9 |
|||
val s = a + b |
|||
while (c >= 0) { |
|||
var d = 9 |
|||
val t = s + c |
|||
while (d >= 0) { |
|||
dS[i--] = t + d |
|||
d-- |
|||
} |
|||
c-- |
|||
} |
|||
} |
|||
a-- |
|||
} |
|||
} |
|||
var a = 0 |
|||
var n = 0 |
|||
while (a < 103) { |
|||
var b = 0 |
|||
val d = dS[a] |
|||
while (b < 1000) { |
|||
var c = 0 |
|||
var s = d + dS[b] + n |
|||
while (c < 10000) { |
|||
SV[dS[c] + s++] = true |
|||
c++ |
|||
} |
|||
b++ |
|||
n += 10000 |
|||
} |
|||
a++ |
|||
} |
|||
} |
|||
fun main() { |
|||
sieve() |
|||
println("The first 50 self numbers are:") |
|||
run { |
|||
var i = 0 |
|||
var count = 0 |
|||
while (count <= 50) { |
|||
if (!SV[i]) { |
|||
count++ |
|||
if (count <= 50) { |
|||
print("$i ") |
|||
} else { |
|||
println() |
|||
println() |
|||
println(" Index Self number") |
|||
} |
|||
} |
|||
i++ |
|||
} |
|||
} |
|||
var i = 0 |
|||
var limit = 1 |
|||
var count = 0 |
|||
while (i < MC) { |
|||
if (!SV[i]) { |
|||
if (++count == limit) { |
|||
println("%,12d %,13d".format(count, i)) |
|||
limit *= 10 |
|||
} |
|||
} |
|||
i++ |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre>The first 50 self numbers are: |
|||
1 3 5 7 9 20 31 42 53 64 75 86 97 108 110 121 132 143 154 165 176 187 198 209 211 222 233 244 255 266 277 288 299 310 312 323 334 345 356 367 378 389 400 411 413 424 435 446 457 468 |
|||
Index Self number |
|||
1 1 |
|||
10 64 |
|||
100 973 |
|||
1,000 10,188 |
|||
10,000 102,225 |
|||
100,000 1,022,675 |
|||
1,000,000 10,227,221 |
|||
10,000,000 102,272,662 |
|||
100,000,000 1,022,727,208</pre> |
|||
=={{header|Pascal}}== |
=={{header|Pascal}}== |