o math.random() retorna um valor aleatório entre 0 e 1, podendo retornar 0, mas jamais retornando 1. Normalmente não se quer um valor assim, mas um inteiro aleatório entre 0 e n; pra fazer isso, nos multiplicamos esse número gerado pelo n (maior numero que queremos no aleatório) e arredondamos. Então, se o meu math.random() retornou 0, minha função sorteia, retorna 0 (0 vezes qlq coisa, é zero), se ela retornar 0,999..., quando multiplicar por n, e arredondar, vai retornar o meu n; e os números intermediários vão retornar números entre 0 e n. Espero que tenha ficado claro, caso não, retorne aqui e eu tento explicar de outra forma.