[HOME - BASE Cinque - Appunti di Matematica ricreativa]

Numeri perfetti

Definizione di numero perfetto
Un numero perfetto è un numero uguale alla somma di suoi divisori propri, compreso il numero 1 ed escluso il numero stesso.

Ad esempio, 6 è un numero perfetto perché 6 = 1+2+3.

I numeri perfetti, da 1 a 100.000 sono soltanto 4:

Numero perfetto Divisori

6

1, 2, 3

28

1, 2, 4, 7,14

496

1, 2, 4, 8, 16, 31, 62, 124, 248

8128

1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064

Un programma in BASIC per cercare i numeri perfetti

DECLARE EXTERNAL FUNCTION s

FOR n=1 TO 100000
LET m=s(n)
IF n=m THEN PRINT n
NEXT n
END

EXTERNAL FUNCTION s(n)
LET sm=1
FOR i=2 TO SQR(n )
IF MOD(n,i)=0 THEN
IF i=n/i THEN LET sm=sm+i ELSE LET sm=sm+i+(n/i)
END IF
NEXT i
LET s=sm
END FUNCTION

Nel programma si definisce e si usa la funzione s(n), che è la somma dei divisori propri di n, compreso il numero 1 ed escluso il numero stesso.
In base alla definizione, si ha che: s(1)=0

Ringrazio Scripter per il seguente programma in C per trovare numeri perfetti
#include <stdio.h>
#define LIMITE 10000

int main()
{
int numero;
int j, totale;
for (numero = 2; numero <= LIMITE; numero++) {
totale = 0;
for (j = 1; j < numero; j++) {
if (numero % j == 0) {
totale += j;
}
}
if (totale == numero) {
printf("%d\n", numero);
}
}
return 0;
}

Una sequenza interessante.
Se partiamo da un numero n e applichiamo ripetutamente la funzione s(n), formeremo una sequenza. Vediamo ad esempio che cosa accade con il numero 15:

s(15)=1+3+5=9,

s(9)=1+3=4,

s(4)=1+2=3,

s(3)=1,

s(1)=0.

Il numero 15 genera la sequenza: 15, 9, 4, 3, 1, 0

Un programma in BASIC che genera le sequenze s(n)
Attenzione: questo programma riconosce la terminazione ma non riconosce i cicli più lunghi di 1 e le sequenze infinite divergenti.

DECLARE EXTERNAL FUNCTION f

FOR n=1 TO 100
LET a=n
PRINT a;
DO
LET m=f(a)
PRINT "-";m;
LET av=a
LET a=m
IF a=0 OR a=n OR a=av THEN EXIT DO
LOOP
print
NEXT n
end
EXTERNAL FUNCTION f(n)
IF n=1 THEN
LET f=0
EXIT FUNCTION
END IF

LET s=1
FOR i=2 TO SQR(n )
IF MOD(n,i)=0 THEN
IF i=n/i THEN LET s=s+i ELSE LET s=s+i+(n/i)
END IF
NEXT i
LET f=s
END FUNCTION

Ecco le sequenze generate dai numeri da 1 a 100.

1 - 0
2 - 1 - 0
3 - 1 - 0
4 - 3 - 1 - 0
5 - 1 - 0
6 - 6 (ciclo infinito di lunghezza 1)
7 - 1 - 0
8 - 7 - 1 - 0
9 - 4 - 3 - 1 - 0
10 - 8 - 7 - 1 - 0
11 - 1 - 0
12 - 16 - 15 - 9 - 4 - 3 - 1 - 0
13 - 1 - 0
14 - 10 - 8 - 7 - 1 - 0
15 - 9 - 4 - 3 - 1 - 0
16 - 15 - 9 - 4 - 3 - 1 - 0
17 - 1 - 0
18 - 21 - 11 - 1 - 0
19 - 1 - 0
20 - 22 - 14 - 10 - 8 - 7 - 1 - 0
21 - 11 - 1 - 0
22 - 14 - 10 - 8 - 7 - 1 - 0
23 - 1 - 0
24 - 36 - 55 - 17 - 1 - 0
25 - 6 - 6
26 - 16 - 15 - 9 - 4 - 3 - 1 - 0
27 - 13 - 1 - 0
28 - 28  (ciclo infinito di lunghezza 1)
29 - 1 - 0
30 - 42 - 54 - 66 - 78 - 90 - 144 - 259 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
31 - 1 - 0
32 - 31 - 1 - 0
33 - 15 - 9 - 4 - 3 - 1 - 0
34 - 20 - 22 - 14 - 10 - 8 - 7 - 1 - 0
35 - 13 - 1 - 0
36 - 55 - 17 - 1 - 0
37 - 1 - 0
38 - 22 - 14 - 10 - 8 - 7 - 1 - 0
39 - 17 - 1 - 0
40 - 50 - 43 - 1 - 0
41 - 1 - 0
42 - 54 - 66 - 78 - 90 - 144 - 259 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
43 - 1 - 0
44 - 40 - 50 - 43 - 1 - 0
45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
46 - 26 - 16 - 15 - 9 - 4 - 3 - 1 - 0
47 - 1 - 0
48 - 76 - 64 - 63 - 41 - 1 - 0
49 - 8 - 7 - 1 - 0
50 - 43 - 1 - 0
51 - 21 - 11 - 1 - 0
52 - 46 - 26 - 16 - 15 - 9 - 4 - 3 - 1 - 0
53 - 1 - 0
54 - 66 - 78 - 90 - 144 - 259 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
55 - 17 - 1 - 0
56 - 64 - 63 - 41 - 1 - 0
57 - 23 - 1 - 0
58 - 32 - 31 - 1 - 0
59 - 1 - 0
60 - 108 - 172 - 136 - 134 - 70 - 74 - 40 - 50 - 43 - 1 - 0
61 - 1 - 0
62 - 34 - 20 - 22 - 14 - 10 - 8 - 7 - 1 - 0
63 - 41 - 1 - 0
64 - 63 - 41 - 1 - 0
65 - 19 - 1 - 0
66 - 78 - 90 - 144 - 259 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
67 - 1 - 0
68 - 58 - 32 - 31 - 1 - 0
69 - 27 - 13 - 1 - 0
70 - 74 - 40 - 50 - 43 - 1 - 0
71 - 1 - 0
72 - 123 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
73 - 1 - 0
74 - 40 - 50 - 43 - 1 - 0
75 - 49 - 8 - 7 - 1 - 0
76 - 64 - 63 - 41 - 1 - 0
77 - 19 - 1 - 0
78 - 90 - 144 - 259 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
79 - 1 - 0
80 - 106 - 56 - 64 - 63 - 41 - 1 - 0
81 - 40 - 50 - 43 - 1 - 0
82 - 44 - 40 - 50 - 43 - 1 - 0
83 - 1 - 0
84 - 140 - 196 - 203 - 37 - 1 - 0
85 - 23 - 1 - 0
86 - 46 - 26 - 16 - 15 - 9 - 4 - 3 - 1 - 0
87 - 33 - 15 - 9 - 4 - 3 - 1 - 0
88 - 92 - 76 - 64 - 63 - 41 - 1 - 0
89 - 1 - 0
90 - 144 - 259 - 45 - 33 - 15 - 9 - 4 - 3 - 1 - 0
91 - 21 - 11 - 1 - 0
92 - 76 - 64 - 63 - 41 - 1 - 0
93 - 35 - 13 - 1 - 0
94 - 50 - 43 - 1 - 0
95 - 25 - 6 - 6
96 - 156 - 236 - 184 - 176 - 196 - 203 - 37 - 1 - 0
97 - 1 - 0
98 - 73 - 1 - 0
99 - 57 - 23 - 1 - 0
100 - 117 - 65 - 19 - 1 - 0

Come si vede, escludendo i numeri perfetti, tutti gli altri numeri, da 1 a 100, generano sequenze che terminano sullo 0.

Sembrano esserci però sequenze infinite e divergenti.
La prima di esse sembra essere quella generata dal numero 138.
Il programma BASIC infatti si è inchiodato sul 138 generando numeri sempre più alti.

138 - 150 - 222 - 234 - 312 - 528 - 960 - 2088 - 3762 - 5598 - 6570 - 10746 - ...

Ci sono inoltre sequenze infinite di ciclo 2.
La prima che si incontra è la seguente:

562 - 284 - 220 - 284 - 220 - 284 - 220 - ...

Queste sono le prime che hanno un "antiperiodo":
1064 - 1336 - 1184 - 1210 - 1184 - 1210 - ...
1308 - 1772 - 1336 - 1184 - 1210 - 1184 - 1210 - ...

Ci sono anche sequenze di ciclo maggiore di 2.
12496 - 14288 - 15472 - 14536 - 14264 - 12496 - ...

Numeri perfetti, amici, socievoli.
Detto questo, possiamo definire:

Ultimo aggiornamento: gennaio 2005


Risposte & riflessioni


Sito Web realizzato da Gianfranco Bo