Ну, у вас есть Супералгоритм , который возвращает число 2
и 5
для n!
, давайте обозначим его как sa(n, 2)
и sa(n, 5)
;для двойного факториала у нас есть 2 дел
Четное число, 2n
:
(2n)!! = 2**n * n!
Итак, число2
s равно
n + sa(n, 2)
, а число 5
s равно
sa(n, 5)
Нечетное число, 2n + 1
:
(2n + 1)!! = (2n + 1)! / (2n)!!
Итак, мы имеем число 2
с:
sa(2n + 1, 2) - (n + sa(n, 2)) = sa(2n + 1, 2) - sa(n, 2) - n
для числа 5
с
sa(2n + 1, 5) - (sa(n, 5)) = sa(2n + 1, 5) - sa(n, 5)
Наконец, давайте обозначим его как псевдокод dfsa
(двухфакторный супералгоритм), n % 2
означает остаток, n / 2
- целочисленное деление:
dfsa2(n) => n % 2 == 0
? n / 2 + sa(n / 2, 2)
: sa(n, 2) - sa(n / 2, 2) - n / 2;
dfsa5(n) => n % 2 == 0
? sa(n / 2, 5)
: sa(n, 5) - sa(n / 2, 5);