Un numero si dice perfetto quando la somma dei suoi divisori propri è uguale al numero stesso. Per divisori propri si intende tutti i divisori tranne il numero stesso.

Alcuni esempi di numeri perfetti sono 6, 28, 496, 8128, ecc…

Infatti se consideriamo il numero 6 i divisori propri sono 1, 2 e 3. La somma di questi divisori è proprio 6.

Se consideriamo il numero 28 la somma dei divisori è 1+2+4+7+14=28.

Quindi in definitiva per risolvere l’algoritmo con Scratch basta trovare tutti i divisori di un numero e sommarli.

Numero perfetto con Scratch

Ecco il funzionamento dell’algoritmo.

Banner Pubblicitario

Spieghiamo l’algoritmo passo passo.

Innanzitutto scegliete uno sfondo a piacere. Dopo chiediamo all’utente di inserire un numero e lo memorizziamo in una variabile.

numero perfetto Scratch

Adesso impostiamo la variabile divisore ad 1, cioè cominciamo a dividere per 1 il numero preso in input. Dopo impostiamo la variabile sommadivisori a 0.

divisori

Quindi inseriamo il ciclo ripeti fino a quando inserendo la condizione divisore>numero/2. Cioè continueremo a dividere il numero finché il divisore sarà uguale alla metà del numero. Infatti, dato che dobbiamo escludere come divisore il numero stesso e dato che è scontato che dividere un numero per valori maggiori della sua metà dà resto diverso da 0, possiamo fermarci alla sua metà.

Ad esempio se il numero preso in input è 6, il divisore si ferma a 3.

Banner pubblicitario

Quindi ecco il prossimo passaggio:

divisore perfetto

Adesso dobbiamo controllare se il resto della divisione di numero diviso divisore è uguale a zero. Se questa condizione è vera il divisore si somma alla variabile sommadivisori.

In ogni caso si incrementa il divisore di 1.

ciclo perfetto

Quindi rimane da controllare se il numero è uguale a sommadivisori, se questa proprietà è verificata allora il numero è perfetto, altrimenti non lo è.

Ecco dunque l’algoritmo finito:

algoritmo finale

Alcuni link utili

Indice tutorial Scratch 3.0

Indice argomenti Scratch 2.0

Numeri primi in Scratch

Massimo fra tre numeri in Scratch

Minimo tra 3 numeri in Scratch

Numeri perfetti con algobuild

Numeri amicabili

Selecion sort in Scratch

Esempio di successione di Fibonacci con Algobuild

La successione di Fibonacci in C++