Я думаю, вам следует применить некоторые математические свойства factorial
перед подсчетом числа завершающих нулей, см. https://mathworld.wolfram.com/Factorial.html
В factorial(n)
вы должны знать, что число конечных нулей зависит от пар 2*5
в каскадном произведении 1*2*...*n
. В этом случае вы можете определить свою пользовательскую функцию zeros
, как показано ниже
zeros <- Vectorize(function(n) ifelse(n>=5,sum(sapply(seq_along(floor(logb(n,5))), function(p) floor(n/5**p) )),0))
, затем вы можете добавить столбец конечных нулей с помощью
df <- within(df,trail0s <- zeros(n))
, чтобы
> df
n trail0s
1 1 0
2 2 0
3 3 0
4 4 0
5 5 1
6 6 1
7 7 1
8 8 1
9 9 1
10 10 2
11 11 2
12 12 2
13 13 2
14 14 2
15 15 3
16 16 3
17 17 3
18 18 3
19 19 3
20 20 4
21 21 4
22 22 4
23 23 4
24 24 4
25 25 5
26 26 5
27 27 5
28 28 5
29 29 5
30 30 6
31 31 6
32 32 6
33 33 6
34 34 6
35 35 7
36 36 7
37 37 7
38 38 7
39 39 7
40 40 8
41 41 8
42 42 8
43 43 8
44 44 8
45 45 9
46 46 9
47 47 9
48 48 9
49 49 9
50 50 10