Imagine que você está num grupo de 23 pessoas, e alguém pergunta:
“Será que duas pessoas aqui fazem aniversário no mesmo dia?”
Estime quais as chances de duas pessoas fazerem aniversário no mesmo dia, num grupo de 23 pessoas. A seguir, estenda o raciocínio para N pessoas.

Resposta teórica: Imagine o contrário, qual a chance de N pessoas não fazerem aniversário no mesmo dia.
Começando com duas pessoas:
Eu vou fazer aniversário em 1 dia do ano, com certeza.
Imagine uma segunda pessoa. Para não fazer aniversário no mesmo dia que eu, há 364 opções de 365 – ou seja, pode fazer niver qualquer dia, menos no meu.
Para duas pessoas, a resposta é 364/365 de chance de ter aniversário em dias distintos.
Para três pessoas, é só estender o raciocínio. A terceira pessoa tem 363 dias em que pode cair, para não conflitar nem comigo nem com a segunda pessoa. Portanto, para três pessoas, a resposta é 1*(364/365)*(363/365) de chance de ter aniversário em dias distintos.
Para N pessoas, é só estender o raciocínio.
1*(364/365)*(363/365)*…*((365-N+1)/365)
Para N = 23, a conta dá 49,40%
e o complemento (não ter duas pessoas fazendo aniversário), dá 50,73%
Ou seja, com 23 pessoas, há mais de 50% de chances de que duas pessoas façam aniversário no mesmo dia (cuidado: não necessariamente no mesmo dia que você, mas sim, duas pessoas entre as 23).
Resposta simulada: É possível fazer uma simulação computacional.
Basta sortear os dias de aniversário entre 1 e 365 para as N pessoas, comparar se há dias iguais, e contar quantas vezes isso acontece se rodar muitas vezes (digamos, 1000 vezes).
lst_dias = [random.randint(1, 365) for _ in range(N)]
Um exemplo abaixo. Neste, houve repetição no dia 126.
[26, 31, 66, 77, 90, 96, 103, 109, 110, 118, 126, 126, 166, 186, 188, 211, 217, 241, 276, 317, 322, 329, 361]
Deixei o código todo no Github: https://github.com/asgunzi/Paradoxo_aniversario
