[HOME - BASE Cinque - Appunti di Matematica ricreativa]
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
Sito Web realizzato da Gianfranco Bo