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.

Implementació en informàtica[modifica]

En 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]

  1. 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. 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].