Parti aliquote e successioni aliquote
Definiamo con s(n) la somma dei divisori (parti aliquote) di n, escluso n.
Si definisce n
numero perfetto se s(n) = n, oppure
numero abbondante se s(n)>n,
difettivo se s(n)
<n
Si definisce "successione aliquota", invece, la successione dei valori di s(x), arrestandosi a s(x)=0,che si ottiene nel seguente modo:
s(n) = k
s(k) = m
s(m) = ... etc
Esempio
s(15)=1+3+5=9, s(9)=1+3=4,s(4)=1+2=3,s(3)=1,s(1)=0
Nota: L'arresto a s(x)=0 è perchè infiniti numeri sono divisibili per 0.
Classi di comportamento
Ogni successione aliquota potenzialmente potrebbe ricadere in una delle seguenti classi di comportamento:
1. termina a 0
2. finisce in un ciclo, di lunghezza 1, di lunghezza 2 o maggiore
3. potrebbe crescere all'infinito
Successioni che terminano a 0
E' il caso dell'esempio di cui prima.
Successioni di lunghezza 1
I numeri perfetti hanno tale caratteristica. Ad esempio s(6)=6, s(28)=28, etc.
Congettura sui numeri perfetti
Si ipotizza che sono infiniti.
Successioni di lunghezza 2
I numeri amichevoli hanno questa caratteristica. Due numeri amichevoli a e b sono così definiti perchè la s(a)=b e s(b)=a.
Ad esempio la più piccola coppia di numeri amichevoli è (220,284).
Congettura sui numeri amichevoli
Si ipotizza che sono infiniti.
Liste di numeri amichevoli
http://djm.cc/amicable.txt
http://amicable.homepage.dk/knwnap.htm
Successioni di lunghezza maggiore di 2
I numeri che danno luogo a sequenze di lunghezza maggiore di 2 sono detti numeri socievoli
Lista di numeri socievoli
http://djm.cc/sociable.txt
Congettura di Catalan e Dickson
Tale congettura ipotizza che tutte le sequenze aliquote a partire da un valore n intero terminano nelle prime due classi di comportamento e mai crescendo all'infinito.
La congettura non è ancora provata e attualmente anche a livello di test al computer finora non si sono completamente testate tutte le situazioni. Ad esempio una di queste è n=276.
Recentemente si sta mettendo in dubbio la congettura, ovvero si è convinti, sempre come congettura da dimostrare, che in realtà anche la classe di comportamento 3 è possibile (vedi [GUY1977] R. K. Guy, Aliquot sequences, in Number Theory and Algebra (Academic Press, 1977).
Se vi va, trovate un controesempio e avrete posto fine alla congettura di Catalan e Dickson!
Problemi correlati
Sfruttando la tecnica delle parti aliquote e modificandone la funzione in gioco si possono costruire altri tipi di numeri.
Definiamo s+(n) = s(n) + 1
Tutte le potenze di 2 sono di questo tipo e di lunghezza 1 (numeri quasi perfetti).
Esistono anche sequenze s+ di lunghezza 2, dette "
coppie amichevoli quasi perfette"; mentre per lunghezze maggiore di 2 si parla di "
numeri sociali quasi perfetti".
Vedi:
http://djm.cc/augmented.fmtlist
http://djm.cc/augsoc.fmtlist
Analogamente definiamo s-(n) = s(n) - 1
otterremo numeri definiti nel seguente modo:
numeri ridotti perfetti o quasi perfetti
numeri ridotti amichevoli o quasi amichevoli (o numeri fidanzati)
numeri ridotti socievoli o quasi socievoli
Vedi:
http://djm.cc/reduced.fmtlist
http://djm.cc/redsoc.fmtlist
Nuove ricerche da fare
Potremmo definire ancora altre funzioni non ancora indagate
s*k(n) = s(n)*k
s/k(n) = s(n)/k con k tale che il risultato sia intero
s*k+m(n) = s(n)*k + m
s/k+m(n) = s(n)/k + m
s^k(m) = s(n)^k
s^k+m(n) = s(n)^k + m
etc...
con k e m interi
Potreste provare a indagare sulle proprietà dei numeri in base a k e m e sulla sequenza.
Eccovi anche un algoritmo semplice con PARI/GP (da migliorare eventualmente) con cui un pò studiare le varie casistiche:
Alq(n,op="+",m=0,k=1) = local(ret=1, str="", str2="");{
str = concat(str,n);
str = concat(str,",");
i = 0;
retp = n;
while(ret!= 0,
i++;
vec = divisors(n);
l = length(vec);
retp2 = ret;
ret = sum(i=1, l-1, vec[i] );
if( op = "+", ret = ret*k + m; );
if( op = "-", ret = ret*k - m; );
if( op = "*", ret = ret*k + m; );
if( op = "^", ret = ret^k + m; );
if( retp == ret,
ret = 0;
);
if( retp2 == ret,
retp2 = -1;
if( retp2==-1, str=concat(str,ret); str=concat(str," cycle"););
ret = 0;
);
if( retp != ret & retp2 != -1,
if(ret==0, str= concat(str,ret););
if(ret!=0, str= concat(str,ret); str=concat(str,","););
n = ret;
);
if( ret==0 & retp2 != -1, str = concat(str," - len = "); str=concat(str,i));
if( ret==0 & i==1 & retp2 != -1, str = concat(str," - perfect number"););
if( ret==0 & i==2 & l > 2 & retp2 != -1, str = concat(str," - amicable number");); /* Not prime number */
if( ret==0 & i>2 & retp2 != -1, str = concat(str," - sociable number"););
);
print(str);
}
Ad esempio lanciabile come:
Alq(6)
Alq(12)
Individua i numeri perfetti, amicabili (escludendo i numeri primi) e i socievoli.
Sui cicli l'algoritmo lo potrete ovviamente migliorare perchè per semplicità quello presentato si arresta solo se due numeri consecutivi sono uguali, ma non individua sequenze ripetute con più di una cifra.
Ad esempio funziona con Alq(25) poichè si ripete 6, ma non funzionerebbe se si ripetono 4,7,2,4,7,2. Quindi va da voi migliorato.
Se invece si lancia con altre operazioni si possono ottenere cicli.
Ad esempio: Alq(12,"*",1,1)
Se si vogliono gestire elevati numeri di cifre, conviene riscrivere il programma con GMP; altrimenti PARI/GP si interrompe laddove non è in grado di proseguire..
Alla prox