Наивный код с одним циклом от большего к меньшему выглядит вот так:
```nim
func factorial(n: int) : int =
  result = 1
  for i in countdown(n, 1):
    result *= i
```

Мне хотелось бы отметить несколько вещей:
1. В `std/math` уже есть функция для вычисления факториала, [`fac`](https://nim-lang.org/docs/math.html#fac%2Cint), возможно будет разумнее использовать её.
2. В наивном варианте не исключается переполнение типа `int`, возможно стоит использовать библиотеки для длинной арифметики, например [`bigints`](https://github.com/nim-lang/bigints) или [`bignum`](https://forum.nim-lang.org/t/1296).
3. При использовании длинной арифметики выбранный порядок умножения не оптимален. Стоит использовать технику [бинарного разделения](https://forum.nim-lang.org/t/8967), то есть рекурсивно делить последовательность на половинки. Так перемножаться будут числа, близкие с точки зрения количества разрядов.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence