Crie funções para calcular:
Arranjo A(n, p)
Arranjo A(n, p)
Passo 1
O enunciado pede para a gente criar uma função que calcule o arranjo simples
, que é um tópico de combinação e permutação dentro de combinatória. Vamos precisar usar a definição matemática de arranjo e implementar, em seguida, funções em Python.
Passo 2
Na teoria, o arranjo simples é definido como
onde
é o fatorial de
e
é o fatorial de
.
Para implementar isso em código, primeiro vamos criar uma função para calcular o fatorial de um número inteiro
. A ideia é multiplicar todos os inteiros de 1 até
. Assim garantimos que podemos reutilizar esse cálculo no arranjo.
Passo 3
Depois, usando a função de fatorial, criamos a função . É importante validar que
para não tentar calcular fatorial de número negativo.
arranjo(n, p)
que retorna
Passo 4
Como otimização, podemos também implementar até
, sem precisar calcular dois fatoriais completos.
arranjo_direto(n, p)
que calcula o arranjo multiplicando apenas os termos necessários de
Resposta
Funções em Python para calcular arranjo A(n, p)
def fatorial(n):
“”"
Calcula o fatorial de n (n!).
n deve ser inteiro não-negativo.
“”"
if n < 0:
raise ValueError(“n deve ser >= 0”)
resultado = 1
for i in range(2, n+1):
resultado *= i
return resultado
“”"
Calcula o fatorial de n (n!).
n deve ser inteiro não-negativo.
“”"
if n < 0:
raise ValueError(“n deve ser >= 0”)
resultado = 1
for i in range(2, n+1):
resultado *= i
return resultado
def arranjo(n, p):
“”"
Calcula o arranjo simples A(n, p) usando fatoriais:
A(n,p) = n! / (n-p)! com 0 <= p <= n
“”"
if p < 0 or p > n:
raise ValueError(“p deve satisfazer 0 <= p <= n”)
return fatorial(n) // fatorial(n - p)
“”"
Calcula o arranjo simples A(n, p) usando fatoriais:
A(n,p) = n! / (n-p)! com 0 <= p <= n
“”"
if p < 0 or p > n:
raise ValueError(“p deve satisfazer 0 <= p <= n”)
return fatorial(n) // fatorial(n - p)
def arranjo_direto(n, p):
“”"
Calcula A(n,p) multiplicando diretamente de (n-p+1) até n,
sem computar dois fatoriais completos.
“”"
if p < 0 or p > n:
raise ValueError(“p deve satisfazer 0 <= p <= n”)
resultado = 1
for i in range(n - p + 1, n + 1):
resultado *= i
return resultado
“”"
Calcula A(n,p) multiplicando diretamente de (n-p+1) até n,
sem computar dois fatoriais completos.
“”"
if p < 0 or p > n:
raise ValueError(“p deve satisfazer 0 <= p <= n”)
resultado = 1
for i in range(n - p + 1, n + 1):
resultado *= i
return resultado