Factorions: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: Added Ruby) |
|||
Line 621: | Line 621: | ||
Factorians for base 12: [1, 2] |
Factorians for base 12: [1, 2] |
||
</pre> |
</pre> |
||
=={{header|Nim}}== |
|||
Note that the library has precomputed the values of factorial, so there is no need for caching. |
|||
<lang Nim>from math import fac |
|||
from strutils import join |
|||
iterator digits(n, base: Natural): Natural = |
|||
## Yield the digits of "n" in base "base". |
|||
var n = n |
|||
while true: |
|||
yield n mod base |
|||
n = n div base |
|||
if n == 0: break |
|||
func isFactorion(n, base: Natural): bool = |
|||
## Return true if "n" is a factorion for base "base". |
|||
var s = 0 |
|||
for d in n.digits(base): |
|||
inc s, fac(d) |
|||
result = s == n |
|||
func factorions(base, limit: Natural): seq[Natural] = |
|||
## Return the list of factorions for base "base" up to "limit". |
|||
for n in 1..limit: |
|||
if n.isFactorion(base): |
|||
result.add(n) |
|||
for base in 9..12: |
|||
echo "Factorions for base ", base, ':' |
|||
echo factorions(base, 1_500_000 - 1).join(" ")</lang> |
|||
{{out}} |
|||
<pre>Factorions for base 9: |
|||
1 2 41282 |
|||
Factorions for base 10: |
|||
1 2 145 40585 |
|||
Factorions for base 11: |
|||
1 2 26 48 40472 |
|||
Factorions for base 12: |
|||
1 2</pre> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |