Subfatorial

O subfatorial, representado pelo símbolo $\large !n$, também conhecido como permutação caótica, fatorial reverso ou inverso fatorial, é um conceito intrigante e menos conhecido que o fatorial tradicional.


Ele se refere ao número de permutações de $n$ elementos em que nenhum elemento está na sua posição original. Imagine um conjunto de $n$ pessoas em uma fila. O subfatorial de $n$ conta quantas maneiras diferentes podemos organizar essa fila sem que ninguém esteja no mesmo lugar que estava inicialmente.


Fórmula:
$$\large !n = n! \sum_{k=0}^n \dfrac{(-1)^k}{k!}$$

Sendo:

  • $n! :$ Fatorial de $n.$
  • $\sum_{k=0}^n:$ Representa a soma dos $k$ termos, de $0$ até $n.$
  • $(-1)^k:$ Um negativo elevado à potenciação do $k$ termo.
  • $k! :$ Fatorial do $k$ termo.

Python :

numero = n
fat = 1
valor = []

for n in range(numero+1):
    num = 1
    w = max(list(num := num * s if n > 0 else 1 for s in list(reversed(range(0, n+1)))))
    t = (-1)**n / w
    valor.append(t)

fat_num = max(list(fat := fat * s for s in list(reversed(range(1, numero+1)))))

subf = fat_num * sum(valor)

Julia :

subf = factorial(n) * sum(map(x -> (-1)^x / factorial(x), n:-1:0))

Libs:

Linguagem Biblioteca Função
Python Math math.factorial(n) * sum(list(map(lambda x: (-1)**x / mt.factorial(x), list(reversed(range(n+1))))))
Julia Combinatorics derangement(n)
subfactorial(n)


Exemplo

 $$\small !4 = 4! \cdot \left[ \dfrac{(-1)^0}{0!} + \dfrac{(-1)^1}{1!} + \dfrac{(-1)^2}{2!} + \dfrac{(-1)^3}{3!} + \dfrac{(-1)^4}{4!} \right]$$

$$\small !4 = 24 \cdot \left[ \dfrac{1}{1} + \dfrac{-1}{1} + \dfrac{1}{2} + \dfrac{-1}{6} + \dfrac{1}{24} \right]$$

$$\small !4 = 24 \cdot \left[ 1 + (-1) + 0.5 + (-0.166) + 0.0416 \right]$$

$$!4 = 24 \cdot 0.375$$

$$\color{lime} !4 = 9$$


Resultado: O subfatorial de 4 é 9.

 

Python

numero = 4
fat = 1
valor = []

for n in range(numero+1):
    num = 1
    w = max(list(num := num * s if n > 0 else 1 for s in list(reversed(range(0, n+1)))))
    t = (-1)**n / w
    valor.append(t)

fat_num = max(list(fat := fat * s for s in list(reversed(range(1, numero+1)))))

subf = fat_num * sum(valor)

Julia

n = 4

subf = factorial(n) * sum(map(x -> (-1)^x / factorial(x), n:-1:0))

 

Quando usar o subfatorial:

  • O número de formas de misturar objetos sem que fiquem nas posições originais.
  • Problemas como o “problema dos chapéus” (quantas formas diferentes $n$ pessoas podem pegar chapéus que não sejam os seus?).


Primorial

O primorial é uma operação matemática, denotada pelo símbolo $\large \#$ que consiste no produto dos números primos até o número inteiro dado.


Exemplo

$$\large 5\# = 5 \cdot 3 \cdot 2 = 30$$


Libs:

Linguagem Biblioteca Função
Python Pyprimesieve
+
Numpy
n = pyprimesieve.primes(x+1)
numpy.prod(n)
Sympy sy.prod(list(sy.primerange(2, x+1)))
Julia Primes prod(primes(x))


Termial

O termial é uma operação matemática, denotada pelo símbolo $\large ?$ que consiste na soma de todos os números inteiros positivos de 1 até um número inteiro não negativo dado.


Exemplo

$$\large 5? = 5 + 4 + 3 + 2 + 1 = 15$$


O termial pode ser definido através da função::

$$\large n? = \frac{n^2 + n}{2}$$


Exemplo

$$\large 5? = \dfrac{5^2 + 5}{2} \to \dfrac{30}{2} \to 15$$


Python :

sum(list(reversed(range(1, x+1))))

sum(reversed(range(1, x+1)))

sum(range(x, 0, -1))

Julia :

sum(x:-1:1)

sum(reverse(range(1, x)))

sum(range(x, 1, step=-1))

sum(collect(x:-1:1))