Matematica e codifica vanno di pari passo: i numeri sono ovunque nella programmazione. Che tu stia controllando se un numero è primo, generando sequenze di Fibonacci o individuando un palindromo, queste piccole sfide affilano sia le tue abilità matematiche che la tua logica di codifica. 

In questo articolo, esploreremo 20 esercizi di programmazione adatti ai principianti basati sui numeri. Per ciascuno, riceverai una breve spiegazione del concetto matematico, alcuni input e output di esempio, e una soluzione Python pronta all'uso. È un modo divertente per praticare la codifica mentre impari come idee matematiche come i quadrati perfetti, i cubi e i numeri triangolari possono prendere vita nel codice.

1. Somma dei Primi N Numeri Naturali

Cosa vuole l'esercizio:

Scrivi un programma per trovare la somma dei primi n numeri naturali. Questo ti aiuta a praticare i cicli o le formule matematiche.

Cosa sono i numeri naturali?

I numeri naturali sono i numeri di conteggio che partono da 1: 1, 2, 3, 4, …

Input di Esempio

5

Output di Esempio

15

Soluzione Python

# Leggi n e calcola la somma dei primi n numeri naturali usando la formula chiusa
n = int(input("Inserisci n: "))
# Usando l'aritmetica intera (//) per evitare i float
total = n * (n + 1) // 2
print(total)

2. Controllo Pari o Dispari

Cosa vuole l'esercizio:

Prendi un input intero e stampa se è pari o dispari.

Cosa significa pari/dispari?

I numeri pari sono divisibili per 2 (es. 2, 4, 6). I numeri dispari lasciano un resto di 1 quando divisi per 2 (es. 1, 3, 5).

Input di Esempio

7

Output di Esempio

7 è dispari

Soluzione Python

# Determina se l'intero di input è pari o dispari usando il modulo
n = int(input("Inserisci un numero: "))
if n % 2 == 0:
    print(f"{n} è pari")
else:
    print(f"{n} è dispari")

3. Controllo Numero Primo

Cosa vuole l'esercizio:

Scrivi un programma per controllare se un numero dato è primo.

Cosa è un numero primo?

Un numero primo è maggiore di 1 e divisibile solo per 1 e se stesso (es. 2, 3, 5, 7).

Input di Esempio

13

Output di Esempio

13 è primo

Soluzione Python

# Controlla la primalità tentando la divisione fino a sqrt(n)
n = int(input("Inserisci un numero: "))
if n < 2:
    print(f"{n} non è primo")
else:
    for d in range(2, int(n**0.5) + 1):
        if n % d == 0:
            print(f"{n} non è primo")
            break
    else:
        print(f"{n} è primo")

4. Somma delle Cifre

Cosa vuole l'esercizio:

Trova la somma di tutte le cifre di un numero.

Perché le somme delle cifre sono importanti?

Le somme delle cifre appaiono nelle regole di divisibilità e in vari rompicapi numerici (es. divisibile per 3 se la somma delle cifre è divisibile per 3).

Input di Esempio

1234

Output di Esempio

10

Soluzione Python

# Somma le cifre iterando i caratteri e convertendoli in interi
s = input("Inserisci un numero: ").strip()
digit_sum = sum(int(ch) for ch in s if ch.isdigit())
print(digit_sum)

5. Controllo Numero Palindromo

Cosa vuole l'esercizio:

Controlla se un numero si legge allo stesso modo all'indietro e in avanti.

Cosa è un numero palindromo?

Un numero come 121, 1331 o 12321 che rimane lo stesso quando viene invertito.

Input di Esempio

12321

Output di Esempio

12321 è un palindromo

Soluzione Python

# Confronta la stringa con la sua inversione per testare il palindromo
s = input("Inserisci un numero: ").strip()
print(f"{s} è un palindromo" if s == s[::-1] else f"{s} non è un palindromo")

6. Trova Tutti i Fattori di un Numero

Cosa vuole l'esercizio:

Elenca tutti i numeri che dividono n in modo uniforme.

Cosa sono i fattori?

I fattori sono interi che puoi moltiplicare per ottenere n. Per 12, i fattori sono 1, 2, 3, 4, 6, 12.

Input di Esempio

12

Output di Esempio

1 2 3 4 6 12

Soluzione Python

# Genera tutti i divisori testando da 1..n
n = int(input("Inserisci un numero: "))
factors = [d for d in range(1, n+1) if n % d == 0]
print(" ".join(map(str, factors)))

7. Controllo Numero Perfetto

Cosa vuole l'esercizio:

Controlla se n è uguale alla somma dei suoi divisori propri (escludendo se stesso).

Cosa è un numero perfetto?

I numeri come 6 (=1+2+3) e 28 (=1+2+4+7+14) sono numeri perfetti.

Input di Esempio

28

Output di Esempio

28 è un numero perfetto

Soluzione Python

# Somma i divisori propri (escludi n) e confronta con n
n = int(input("Inserisci un numero: "))
proper = [d for d in range(1, n) if n % d == 0]
print(f"{n} è un numero perfetto" if sum(proper) == n else f"{n} non è un numero perfetto")

8. Controllo Numero di Armstrong (Narcisistico)

Cosa vuole l'esercizio:

Controlla se n è uguale alla somma delle sue cifre elevate alla potenza del numero di cifre.

Cosa è un numero di Armstrong?

Esempio: 153 = 1³ + 5³ + 3³; 9474 = 9⁴ + 4⁴ + 7⁴ + 4⁴.

Input di Esempio

153

Output di Esempio

153 è un numero di Armstrong

Soluzione Python

# Eleva ogni cifra alla potenza del numero totale di cifre e somma
s = input("Inserisci un numero: ").strip()
p = len(s)
arm = sum(int(ch)**p for ch in s)
print(f"{s} è un numero di Armstrong" if arm == int(s) else f"{s} non è un numero di Armstrong")

9. Controllo Quadrato Perfetto

Cosa vuole l'esercizio:

Controlla se un numero è un quadrato perfetto.

Cosa è un quadrato perfetto?

Un numero che può essere scritto come k² (es. 4, 9, 16, 25).

Input di Esempio

49

Output di Esempio

49 è un quadrato perfetto

Soluzione Python

# Usa la radice quadrata intera per evitare problemi con i numeri in virgola mobile
import math
n = int(input("Inserisci un numero: "))
print(f"{n} è un quadrato perfetto" if math.isqrt(n)**2 == n else f"{n} non è un quadrato perfetto")

10. Controllo Cubo Perfetto

Cosa vuole l'esercizio:

Controlla se un numero è un cubo perfetto.

Cosa è un cubo perfetto?

Un numero che può essere espresso come k³ (es. 8, 27, 64).

Input di Esempio

27

Output di Esempio

27 è un cubo perfetto

Soluzione Python

# Approssima la radice cubica arrotondando e verifica ricubando
n = int(input("Inserisci un numero: "))
croot = round(n ** (1/3))
print(f"{n} è un cubo perfetto" if croot**3 == n else f"{n} non è un cubo perfetto")

11. Generatore di Sequenza di Fibonacci

Cosa vuole l'esercizio:

Genera i primi n numeri di Fibonacci.

Cosa è un numero di Fibonacci?

Sequenza che inizia con 0, 1 dove ogni nuovo termine è la somma dei due precedenti: 0, 1, 1, 2, 3, 5, 8, …

Input di Esempio

7

Output di Esempio

0 1 1 2 3 5 8

Soluzione Python

# Costruisci iterativamente la sequenza di Fibonacci usando due tracker
n = int(input("Inserisci n: "))
a, b = 0, 1
seq = []
for _ in range(n):
    seq.append(a)
    a, b = b, a + b
print(" ".join(map(str, seq)))

12. Controlla se un Numero è nella Sequenza di Fibonacci

Cosa vuole l'esercizio:

Controlla se un numero dato appartiene alla sequenza di Fibonacci.

Fatto matematico:

n è Fibonacci se (5n² + 4) o (5n² − 4) è un quadrato perfetto.

Input di Esempio

21

Output di Esempio

21 è un numero di Fibonacci

Soluzione Python

# Usa il test del quadrato perfetto 5n^2±4 per controllare l'appartenenza a Fibonacci
import math

def is_square(x: int) -> bool:
    return math.isqrt(x)**2 == x

n = int(input("Inserisci un numero: "))
if is_square(5*n*n + 4) or is_square(5*n*n - 4):
    print(f"{n} è un numero di Fibonacci")
else:
    print(f"{n} non è un numero di Fibonacci")

13. Controllo Numero Triangolare

Cosa vuole l'esercizio:

Controlla se n è triangolare: n = k(k+1)/2 per qualche intero k.

Cosa è un numero triangolare?

Formano triangoli di punti: 1, 3, 6, 10, 15, …

Input di Esempio

15

Output di Esempio

15 è un numero triangolare

Soluzione Python

# Risolvi k(k+1)/2 = n controllando k = floor((sqrt(8n+1)-1)/2)
import math
n = int(input("Inserisci un numero: "))
k = int((math.isqrt(8*n + 1) - 1) // 2)
print(f"{n} è un numero triangolare" if k * (k + 1) // 2 == n else f"{n} non è un numero triangolare")

14. Numero Razionale (Decimale → Frazione)

Cosa vuole l'esercizio:

Converti un decimale in una frazione semplificata p/q.

Cosa è un numero razionale?

Un numero esprimibile come rapporto di interi (es. 0.75 = 3/4).

Input di Esempio

0.75

Output di Esempio

3/4

Soluzione Python

# Usa Fraction per convertire il decimale in forma p/q e semplificare
from fractions import Fraction
x = float(input("Inserisci un decimale: "))
print(Fraction(x).limit_denominator())

15. Controllo Numero Triangolare

Cosa vuole l'esercizio:

Controlla se un numero è triangolare, il che significa che può formare un triangolo equilatero.

Cosa è un numero triangolare?

I numeri triangolari sono somme dei primi n numeri naturali: 1, 3, 6, 10, 15…

Input di Esempio

10

Output di Esempio

10 è un numero triangolare

Soluzione Python

import math

n = int(input("Inserisci un numero: "))
# Formula: se 8n+1 è un quadrato perfetto, allora n è triangolare
check = 8 * n + 1
if int(math.isqrt(check))**2 == check:
    print(f"{n} è un numero triangolare")
else:
    print(f"{n} non è un numero triangolare")

16. Generatore di Sequenza di Fibonacci

Cosa vuole l'esercizio:

Genera la sequenza di Fibonacci fino a n termini.

Cosa è la sequenza di Fibonacci?

È una sequenza in cui ogni numero è la somma dei due precedenti: 0, 1, 1, 2, 3, 5, 8…

Input di Esempio

7

Output di Esempio

0 1 1 2 3 5 8

Soluzione Python

n = int(input("Inserisci il numero di termini: "))
a, b = 0, 1
for _ in range(n):
    print(a, end=" ")
    a, b = b, a + b

17. Somma delle Cifre

Cosa vuole l'esercizio:

Calcola la somma di tutte le cifre in un numero dato.

Cosa significa?

Esempio: le cifre di 1234 sono 1+2+3+4 = 10.

Input di Esempio

1234

Output di Esempio

10

Soluzione Python

n = input("Inserisci un numero: ")
# Converti ogni carattere di nuovo in int e somma
s = sum(int(d) for d in n)
print(s)

18. Inverti un Numero

Cosa vuole l'esercizio:

Inverti le cifre del numero dato.

Cosa significa?

Esempio: 12345 diventa 54321.

Input di Esempio

12345

Output di Esempio

54321

Soluzione Python

n = input("Inserisci un numero: ")
# Usa lo slicing per invertire
print(n[::-1])

19. Massimo Comun Divisore (GCD)

Cosa vuole l'esercizio:

Trova il numero più grande che divide due interi senza resto.

Cosa è il GCD?

Il più grande divisore comune a entrambi i numeri. Esempio: gcd(12, 18) = 6.

Input di Esempio

12 18

Output di Esempio

6

Soluzione Python

import math

a, b = map(int, input("Inserisci due numeri: ").split())
# Usa math.gcd per efficienza
print(math.gcd(a, b))

20. Minimo Comune Multiplo (LCM)

Cosa vuole l'esercizio:

Trova il numero più piccolo che è divisibile per entrambi gli interi dati.

Cosa è il LCM?

Il minimo comune multiplo di due numeri. Esempio: lcm(4, 6) = 12.

Input di Esempio

4 6

Output di Esempio

12

Soluzione Python

import math

a, b = map(int, input("Inserisci due numeri: ").split())
# Formula: lcm(a, b) = abs(a*b) // gcd(a, b)
print(abs(a*b) // math.gcd(a, b))