Nombre perfecte
Un nombre perfecte és un enter que és igual a la suma dels seus divisors positius, excepte ell mateix. Així, 6 és un nombre perfecte, perquè els seus divisors propis són 1, 2 i 3, i 6 = 1 + 2 + 3.[1] Els següents nombres perfectes són 28, 496 i 8.128.
Els nombres perfectes estan relacionats amb els nombres primers de Mersenne: si M és un primer de Mersenne (un nombre primer que és una unitat menor que una potència de 2), aleshores M(M+1)/2 és un nombre perfecte, és a dir, que 2n−1(2n − 1) és un nombre perfecte. Això va ser demostrat per Euclides[2] en el segle IV abans de la nostra era:
- per a n = 2: 2¹(2² − 1) = 6
- per a n = 3: 2²(23 − 1) = 28
- per a n = 5: 24(2⁵ − 1) = 496
- per a n = 7: 2⁶(27 − 1) = 8128
A més, Euler va demostrar en el segle xviii que tots els nombres perfectes parells són d'aquesta forma.[2] També està demostrat que l'última xifra de qualsevol nombre perfecte parell ha de ser 6 o 8.
No es coneix l'existència de nombres perfectes senars. No obstant això, existeixen alguns resultats parcials: si hi ha un nombre perfecte imparell, ha de complir, entre d'altres, les condicions següents: ser major que 10300; tenir almenys 8 factors primers diferents (i com a mínim 11 si no és divisible per 3); un d'aquests factors ha de ser major que 107, dos d'aquests han de ser majors que 10.000 i tres han ser majors que 100; tenir, com a mínim, 75 factors primers (incloent-hi repeticions).
Considerant la suma dels divisors propis, hi ha altres tipus de nombres.
- Nombres deficients: la suma dels divisors propis és menor que dues vegades el nombre.
- Nombres abundants: la suma és major que dues vegades el nombre.
- Nombres amics: a i b són tals que a és la suma dels divisors de b i viceversa.
- Nombres sociables: com els amics, però amb un cicle major de nombres.
Implementació en informàtica
modificaEn C++ es pot escriure un codi com el que segueix per tal de trobar si un nombre és perfecte. El mètode mostrat és el més eficient, amb cost .
bool es_perfecte (int n) {
int sum=1;
for (int compt=2; compt*compt<=n; ++compt) {
if (compt*compt==n) sum=sum+compt;
else if (n%compt==0) {
sum=sum+compt;
sum = sum + n/compt;
}
}
if (sum==n and n!=0 and n!=1) return true;
else return false;
}
En Java:
public static boolean perfecte(int n) {
return divisors(n)==n && n!=0;
}
public static int divisors(int n) {
int suma = 0;
for (int i = 1; i < n; ++i) {
if (n%i == 0) suma += i;
}
return suma;
}
En Python:
def perfecte(n):
return divisors(n) == n
def divisors(n):
suma = 0
for i in range(1, n):
if n%i == 0: suma += i
return suma
Referències
modifica- ↑ Corbalán Yuste, F. et al.. Gamma 2 : matemàtiques : Educació Secundària, segon curs. 1a.. Barcelona: Vicens Vives, 2003, p. 8. ISBN 84-316-6978-2.
- ↑ 2,0 2,1 Gardner, Martin. «11. Perfectos, amigos y sociables». A: Festival mágico-matemático (en castellà). 2a. Madrid: Alianza Editorial, 2018, p. 208. ISBN 978-84-8181-315-6 [Consulta: 22 febrer 2020].