SUPERCAT.DEV

Benvenut* sul mio blog

MATH

03 - Almeno un 6: quando conviene calcolare il contrario

14-08-2026

Probabilità e combinatoria nei giochi

Supponiamo di lanciare un dado equo quattro volte e chiediamoci:

Qual è la probabilità di ottenere almeno un 6?

Il problema sembra semplice, ma contiene già una scelta importante sul modo di contare.

"Almeno un 6" comprende parecchi casi diversi: possiamo ottenere esattamente un 6, oppure due, oppure tre, oppure quattro. Potremmo provare a calcolare separatamente tutte queste possibilità e sommarle.

Funzionerebbe.

Ma sarebbe un modo inutilmente lungo di risolvere un problema che ha un contrario molto più semplice.

Invece di chiedere:

qual è la probabilità di ottenere almeno un 6?

possiamo chiederci:

qual è la probabilità di non ottenere mai 6?

Una volta trovata, basta sottrarla da 1.

Questo è il principio dell'evento complementare.

Un evento e il suo contrario

Chiamiamo:

A = "esce almeno un 6 nei quattro lanci"

Il suo complementare è:

A^c = "non esce nessun 6 nei quattro lanci"

I due eventi coprono tutte le possibilità e non possono verificarsi contemporaneamente.

Per questo:

$$ P(A) + P(A^c) = 1 $$

e quindi:

$$ P(A) = 1 - P(A^c) $$

La formula è elementare. La parte interessante è riconoscere quando il complementare rende il problema più semplice.

"Almeno uno" è uno dei segnali più comuni.

Prima un solo lancio

Con un dado equo:

$$ P(6) = 1/6 $$

Quindi la probabilità di non ottenere 6 è:

P(non 6) = 5/6

Fin qui non c'è nulla di nuovo.

La domanda diventa ora:

Qual è la probabilità che in quattro lanci indipendenti non esca mai 6?

Perché possiamo moltiplicare?

Ogni lancio del dado è indipendente dagli altri.

Questo significa che sapere cosa è successo in un lancio non modifica la probabilità del successivo.

Se il dado è equo, anche dopo tre risultati consecutivi senza 6 il quarto lancio continua ad avere:

P(non 6) = 5/6

La probabilità che due eventi indipendenti si verifichino entrambi è il prodotto delle loro probabilità.

Quindi, per due lanci:

P(nessun 6)
=
5/6 · 5/6
=
(5/6)²

Per quattro lanci:

P(nessun 6)
=
(5/6)⁴

Calcoliamo:

(5/6)⁴
=
625/1296
≈
0,482253

cioè circa:

48,23%

Questo è il complementare dell'evento che ci interessa.

Torniamo alla domanda iniziale

La probabilità di ottenere almeno un 6 è quindi:

P(almeno un 6)
=
1 - P(nessun 6)

ossia:

P(almeno un 6)
=
1 - (5/6)⁴

e quindi:

P(almeno un 6)
=
1 - 625/1296
=
671/1296
≈
0,517747

cioè circa:

51,77%

Quindi, lanciando quattro volte un dado equo, è leggermente più probabile vedere almeno un 6 che non vederne nessuno.

Perché il metodo diretto è più scomodo

Proviamo a ragionare senza usare il complementare.

"Almeno un 6" significa:

esattamente 1 sei
oppure
esattamente 2 sei
oppure
esattamente 3 sei
oppure
esattamente 4 sei

Già qui nasce un problema: non basta conoscere la probabilità di una singola sequenza.

Per esempio:

6, 2, 3, 4

è un caso con un solo 6, ma anche:

2, 6, 3, 4

lo è.

Dovremmo quindi contare quante posizioni può occupare il 6, poi quante configurazioni producono due 6, e così via.

Più avanti vedremo che questo problema si risolve elegantemente con le combinazioni e porta direttamente alla distribuzione binomiale.

Per ora, però, non abbiamo bisogno di introdurre strumenti nuovi.

Il complementare trasforma un evento con molti casi favorevoli in un unico schema molto semplice:

nessun 6
=
non 6
e non 6
e non 6
e non 6

e quindi:

$$ (5/6)^{4} $$

"Almeno uno" spesso suggerisce il complementare

La stessa struttura compare in moltissimi giochi.

Se peschiamo più volte con reinserimento e vogliamo sapere la probabilità di ottenere almeno una certa carta, può essere più semplice calcolare la probabilità di non ottenerla mai.

Se lanciamo due dadi più volte e vogliamo sapere la probabilità di osservare almeno una volta una certa somma, possiamo prima calcolare la probabilità che quella somma non compaia in nessuna prova.

La tecnica non dipende dal dado.

Dipende dalla forma logica del problema.

Quando leggiamo:

almeno uno

conviene quasi sempre chiedersi:

è più semplice calcolare zero?

Non sempre la risposta sarà sì, ma è una domanda che vale la pena fare.

Generalizziamo a n lanci

Se la probabilità di successo in una singola prova è:

$$ p $$

allora la probabilità di non avere successo è:

$$ 1 - p $$

Se ripetiamo n prove indipendenti, la probabilità di nessun successo è:

$$ (1 - p)^n $$

Perciò:

P(almeno un successo)
=
1 - (1 - p)^n

Nel caso del dado:

$$ p = 1/6 $$

e quindi:

P(almeno un 6 in n lanci)
=
1 - (5/6)^n

Questa formula non è una nuova legge da memorizzare. È soltanto la combinazione di due idee:

complementare
+
indipendenza

Quanto cresce la probabilità aumentando i lanci?

Con un lancio:

P(almeno un 6) = 1/6 ≈ 16,67%

Con due:

1 - (5/6)²
≈
30,56%

Con tre:

1 - (5/6)³
≈
42,13%

Con quattro:

1 - (5/6)⁴
≈
51,77%

Con dieci:

1 - (5/6)¹⁰
≈
83,85%

La probabilità cresce all'aumentare dei lanci e tende a 1.

Ma non raggiunge 1 per un numero finito di prove.

Anche dopo moltissimi lanci rimane sempre possibile, per quanto improbabile, non ottenere nemmeno un 6.

Questa distinzione è importante: "molto probabile" non significa "certo".

Una domanda inversa: quanti lanci servono per superare il 50%?

Ora possiamo usare la stessa formula al contrario.

Cerchiamo il minimo numero n tale che:

$$ 1 - (5/6)^n > 0,5 $$

Con tre lanci abbiamo circa:

42,13%

Con quattro:

51,77%

Quindi il primo valore che supera il 50% è:

$$ n = 4 $$

Questo è un piccolo esempio di un problema che ritroveremo spesso nei giochi: non chiedere soltanto "qual è la probabilità?", ma anche "quante prove servono per superare una certa soglia?".

Il calcolo esatto in C#

Lo standalone C# associato a questo articolo è:

AlmenoUnSei.cs

Possiamo scrivere direttamente la formula generale:

static double ProbabilitaAlmenoUnSuccesso(
    double probabilitaSuccesso,
    int numeroProve)
{
    if (probabilitaSuccesso < 0.0 ||
        probabilitaSuccesso > 1.0)
    {
        throw new ArgumentOutOfRangeException(
            nameof(probabilitaSuccesso));
    }

    if (numeroProve < 0)
    {
        throw new ArgumentOutOfRangeException(
            nameof(numeroProve));
    }

    double probabilitaNessunSuccesso =
        Math.Pow(1.0 - probabilitaSuccesso, numeroProve);

    return 1.0 - probabilitaNessunSuccesso;
}

double probabilita = ProbabilitaAlmenoUnSuccesso(
    probabilitaSuccesso: 1.0 / 6.0,
    numeroProve: 4);

Console.WriteLine($"{probabilita:P4}");

Il risultato è circa:

51,7747%

Il codice corrisponde direttamente alla derivazione:

$$ 1 - (1 - p)^n $$

Possiamo anche trovare automaticamente la soglia

Se vogliamo sapere quanti lanci servono per superare una probabilità prefissata:

static int ProvePerSuperare(
    double probabilitaSuccesso,
    double soglia)
{
    if (probabilitaSuccesso <= 0.0 ||
        probabilitaSuccesso > 1.0)
    {
        throw new ArgumentOutOfRangeException(
            nameof(probabilitaSuccesso));
    }

    if (soglia < 0.0 || soglia >= 1.0)
    {
        throw new ArgumentOutOfRangeException(
            nameof(soglia));
    }

    int prove = 0;

    while (ProbabilitaAlmenoUnSuccesso(
        probabilitaSuccesso,
        prove) <= soglia)
    {
        prove++;
    }

    return prove;
}

int minimo = ProvePerSuperare(
    probabilitaSuccesso: 1.0 / 6.0,
    soglia: 0.5);

Console.WriteLine(minimo);

Otteniamo:

4

Non serviva il computer per questo caso, ma il codice rende evidente come trasformare il ragionamento in un algoritmo generale.

Verifichiamo con Monte Carlo

Come nei primi due articoli, possiamo confrontare la probabilità teorica con una simulazione.

static double SimulaAlmenoUnSei(
    int numeroEsperimenti,
    int lanciPerEsperimento,
    int seed = 42)
{
    if (numeroEsperimenti <= 0)
        throw new ArgumentOutOfRangeException(nameof(numeroEsperimenti));

    if (lanciPerEsperimento <= 0)
        throw new ArgumentOutOfRangeException(nameof(lanciPerEsperimento));

    var random = new Random(seed);
    int esperimentiConAlmenoUnSei = 0;

    for (int esperimento = 0;
         esperimento < numeroEsperimenti;
         esperimento++)
    {
        bool trovato = false;

        for (int lancio = 0;
             lancio < lanciPerEsperimento;
             lancio++)
        {
            if (random.Next(1, 7) == 6)
            {
                trovato = true;
                break;
            }
        }

        if (trovato)
            esperimentiConAlmenoUnSei++;
    }

    return (double)esperimentiConAlmenoUnSei
        / numeroEsperimenti;
}

double osservata = SimulaAlmenoUnSei(
    numeroEsperimenti: 1_000_000,
    lanciPerEsperimento: 4);

Console.WriteLine($"{osservata:P4}");

In questo caso ogni "esperimento" è composto da quattro lanci.

Ci interessa soltanto sapere se in quel gruppo è comparso almeno un 6.

Su un grande numero di esperimenti la frequenza osservata dovrebbe essere vicina al valore teorico:

51,77%

La simulazione continua però a essere una verifica empirica, non la fonte del risultato esatto.

Attenzione: indipendenza non significa che tutto si possa moltiplicare

Abbiamo moltiplicato:

$$ 5/6 \cdot 5/6 \cdot 5/6 \cdot 5/6 $$

perché gli eventi:

"non esce 6 al primo lancio"
"non esce 6 al secondo lancio"
...

sono indipendenti.

Questa proprietà non va data per scontata in tutti i giochi.

Se peschiamo una carta da un mazzo e non la rimettiamo, la composizione del mazzo cambia. La probabilità della seconda estrazione dipende allora da ciò che è successo nella prima.

Per esempio, la probabilità di pescare due assi consecutivi da un mazzo senza reinserimento non è:

$$ 4/52 \cdot 4/52 $$

ma:

$$ 4/52 \cdot 3/51 $$

Perché dopo il primo asso rimangono soltanto tre assi tra 51 carte.

Dedicheremo un articolo specifico proprio a questa differenza.

Per ora il punto essenziale è che il prodotto di probabilità semplici funziona direttamente quando le prove rilevanti sono indipendenti.

Il punto pratico

Con questo problema abbiamo aggiunto due strumenti fondamentali.

Il primo è il complementare:

$$ P(A) = 1 - P(A^c) $$

Il secondo è il prodotto per prove indipendenti:

$$ P(A e B) = P(A) \cdot P(B) $$

Nel nostro caso, invece di contare tutti i modi in cui può comparire almeno un 6, abbiamo calcolato l'unico schema che esclude completamente il 6:

P(nessun 6)
=
(5/6)⁴

e poi:

P(almeno un 6)
=
1 - (5/6)⁴
=
671/1296
≈
51,77%

Questa tecnica ritornerà continuamente nella serie, perché molti problemi apparentemente complicati diventano semplici quando li guardiamo dal lato opposto.

Con questo articolo si chiude il primo blocco del percorso: abbiamo imparato a costruire uno spazio campionario, a riconoscere quando gli esiti sono equiprobabili, a comporre più prove indipendenti e a usare il complementare.

Il passo successivo sarà diverso.

Finora abbiamo contato pochi esiti o prodotti semplici. Con un mazzo di carte, invece, il numero di possibili ordinamenti cresce così rapidamente che serve un nuovo strumento.

È il momento di incontrare il fattoriale e le permutazioni.