venerdì 14 maggio 2010

Persiani amichevoli

Persiani amichevoli

Esiste un legame tra numeri primi e numeri amicabili? Abbiamo visto che i numeri primi hanno solo due divisori diversamente da una coppia di numeri amicabili.

Un quesito: Un numero amicabile è solo pari? Sapreste dimostrare se è vero o falso?

Mentre meditate, vi dico che sicuramente un numero amicabile è composto, perchè ammette un numero di divisori maggiore di 2 e, quindi, scomponibile in numeri primi.

Altra domanda: dati tre numeri primi p,q,r possiamo ottenere dei numeri amicabili?

Al-Faris, vissuto in Persia attorno al 1300, nel suo testo sulle coppie amicabili, fornì la coppia (2^k)pq, (2^k)r, che è amicabile se e solo se:

p = (3*(2^(k-1)))-1,
q = (3*(2^k))-1
r = 9*(2^(2k-1))-1

sono tutti numeri primi, per k maggiore o uguale a 2.

E' evidente, per la definizione di Al Faris su come trovare i numeri amicabili tramite tre primi, che si tratta di potenze di 2 (pari) moltiplicate per dei dispari, il cui risultato è obbligatoriamente un pari.

Se si fissa k=2, si ottiene ad esempio p=5, q=11, r=71 tutti primi e quindi la coppia amicabile 220 e 284.

Per vedere quali coppie di numeri sono amichevoli con p,q,r primi è possibile scrivere un programmino in PARI/GP o in MAXIMA. In realtà si potrebbe tentare anche di risolvere un sistema di equazioni.

Il metodo di Al-Faris però non dà tutte le coppie di numeri amicabili, ma solo quelle ottenibili con le condizioni di cui sopra (vedi lista amichevoli noti http://amicable.homepage.dk/knwnc2.htm).

Ad esempio sono amichevoli anche le coppie (1184,1210) (2620,2924) (5020,5564) (6232,6368) che storicamente furono trovate da Eulero. Oggi il totale di coppie note, grazie ai computer è notevole: un totale di circa 11994387 coppie e si continua a trovarne altre.
 
Ecco un semplice programma in PARI/GP che sfrutta l'algoritmo di Al-Faris.
Samic(n1=2, n2=1000)=local();{
 if( n1<2, error("deve essere n1>=2"););
 for(k=n1,n2,
     p=(3*(2^(k-1)))-1;
     q=(3*(2^(k)))-1;
     r=(9*(2^(2*k-1)))-1;
     if(isprime(p) & isprime(q) & isprime(r) == 1,
         N=(2^k)*(p*q);
         M=(2^k)*r;
         print("(",N,",",M,")");
     );
 );  
 print("Numeri esaminati ", n2-n1+1 );
 return;
}

Ecco cosa fornisce con k tra 2 e 1000:
(220,284)
(17296,18416)
(9363584,9437056)
 
Vi do adesso la risposta al quesito iniziale: è falso. Esistono anche coppie di numeri amichevoli dispari e coppie di numeri amichevoli pari; ma non si trovano miste, ovvero uno pari e l'altro dispari. E' dimostrabile?
La lascio a voi la dimostrazione. Un suggerimento: partite dalla somma dei divisori (escluso se stesso) di un numero amichevole pari; che cosa vi da e perchè?

Altre osservazioni

1. Nessun numero amichevole è un quadrato

2. Esistono coppie di numeri amichevoli la cui somma delle cifre è uguale (mod 9); esempio: 
    (69615,87633)  da cui  6+9+6+1+5 = 27 e 8+7+6+3+3 = 27
     il mod 9 = 0 per entrambi

3. Esistono coppie amichevole che ogni numero è divisibile per la somma delle sue cifre; esempio:
    (2620, 2924). Qui 2+6+2+0=10 difatti 2610 è divisibile per 10; mentre 2+9+2+4=17 e 2924 è 
    divisibile per 17. Un numero divisibile per la somma delle sue cifre è detto Harshad number
    per cui la coppia amichevole è una Harshad amicable pair (HsAP).

    Esempi sono le coppie:

     (2620, 2924)
     (10634085,14084763),
     (23389695, 25132545),
     (34256222, 35997346)
     etc.

4 Spesso i numeri amichevoli di una coppia terminano con 0 e 5.

5 Il rapporto minimo n/m con n minore di m è tra 0.598343 e
  0.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998

6. Un Happy number è un numero tale che prendendo il quadrato delle sue cifre e sommandole e iterando il 
     processo si ottiene alla fine 1. Ad esempio prendiamo 7, si ottiene la sequenza:
     7,7x7=49,4x4+9x9=97,9x9+7x7=130,1x1+3x3=10,1x1=1.

     Le coppie di numeri amichevoli che sono costituite da Happy number sono definite Happy amicable 
    pair  (HyAP)

     Esempi sono le coppie:
 
     (10572550, 10854650),
     (32685250, 34538270),
     (35361326, 40117714),
     (35390008, 39259592)
     etc.

Algoritmo che cerca tutti i numeri amichevoli
Un algoritmo semplice che cerca, invece, tutti i numeri amichevoli può essere come quello che segue

Allamic(n1=2, n2=1000)=local(s=0, prec1=0);{
 if( n1<2, error("deve essere n1>=2"););
 for(k=n1,n2,
     s=AlqSum(k);
     if( AlqSum(s) == k && k! = s & k != prec1,
         print("(",k,",",s,")");
         prec1=s;
    );
    
 );  
 print("Numeri esaminati ", n2-n1+1 );
 return;
}

AlqSum(n)=local(ret=1);{
 vec = divisors(n);
 ret = sum(i=1, length(vec)-1, vec[i] );
 return(ret);
}


Alla prox.

0 commenti:

Posta un commento