Un metodo poco pratico per trovare tutti i numeri primi Di Cristiano Armellini, [email protected] Partiamo da primi due numeri primi dispari p1 3, p2 5 (tutti i numeri primi sono dispari tranne il 2). Il successivo numero dispari è 7 ma 7 è primo ? Per saperlo dobbiamo vedere se esistono due interi positivi a, b tali che 3a 5b 7 . Dovrà però essere (Int è la funzione parte intera): 0 a Int (log 3 7) 1 0 b Int (log 5 7) 1 Quindi la relazione 3a 5b 7 non può essere verificata per a,b che possono assumere solo i valori 0, 1 allora possiamo dire che 7 è primo. In alternativa per diminuire le dimensioni dei calcoli si può passare ai logaritmi ovvero a ln(3) b ln(5) ln(7) 0 a Int (log 3 7) 1 0 b Int (log 5 7) 1 Il successivo numero dispari dopo il 7 è il 9 ma 9 è primo ? Seguendo la procedura descritta sopra dobbiamo vedere se l’equazione 3a 5b 7 c 9 ha soluzioni intere nelle variabili a, b, c con i seguenti vincoli: 0 a Int (log 3 9) 2 0 b Int (log 5 9) 1 0 c Int (log 7 9) 1 Ovviamente a = 2, b = c = 0 è l’unica soluzione, quindi 9 non è primo. Per il teorema fondamentale dell’aritmetica l’equazione a variabili intere deve avere sempre una sola soluzione nel caso che il numero da verificare sia composto o non averne nel caso che sia primo. Al progredire della lista dei primi i calcoli si fanno sempre più complessi e articolati e questo dimostra che il metodo è meno efficiente di molti altri sistemi compreso il crivello di Eratostene anche se è possibile migliorarlo e raffinarlo come ad esempio si potrebbe trascurare le potenze del 5 in quanto sappiamo che tutti i numeri che terminano per 5 sono divisibili per 5. Anche qui per diminuire le dimensioni dei numeri in gioco possiamo facilmente passare ai logaritmi ottenendo: ln(9) a ln(3) b ln(5) c ln(7) 0 a Int (log 3 9) 2 0 b Int (log 5 9) 1 0 c Int (log 7 9) 1 Decisamente migliore il metodo secondo cui si parte da due numeri primi dispari: P1= 3, P2 = 5 Si calcola il prodotto Q = P1*P2 = 15 Se prende il successivo numero dispari dopo il 5 che è 7 Poi si calcola con l’algoritmo di Euclide MCD(Q, 7): se è pari a 1 allora vuol dire che 7 è primo altrimenti non lo è ovvero è composto Nel nostro caso MCD(15, 7)=1 quindi 7 è primo, P3 = 7 A questo punto aggiorniamo Q = (P1*P2)*P3= 15*7 = 105 Ripetiamo il procedimento con il successivo numero dispari dopo il 7 che è il 9 MCD(105, 9)= 3 quindi 9 non è primo allora Q (produttoria dei primi) rimane 105 e si va avanti con il successivo candidato dispari, l’11. ecc.. Lo svantaggio di questo metodo è il fatto che la produttoria dei primi Q = P1*P2*P3... cresce in modo molto evidente e quindi anche se è facile fare prodotti di numeri anche molto grandi abbiamo bisogno di programmi speciali per maneggiare interi di queste dimensioni (es Python, Pari/GP). Sapendo che in un numero composto dispari n il fattore più piccolo deve essere minore della radice quadrata del numero n (per verificare che n è primo basta provare che non ha fattori tra 2 e la radice quadrata di n) possiamo scrivere: n primo sse MCD(n, [int n ]!!) 1 o anche MCD(int n , [int n ]!!) 1 (altrimenti il MCD dà un fattore di n=pq) dove con il simbolo !! intendiamo il semifattoriale per numeri dispari per avere il prodotto di tutti i dispari minori della parte intera della redice quadrata di n (sostituibile in modo superfluo con il fattoriale) mentre il MCD si calcola con l’algoritmo di Euclide costituito da semplici somme e sottrazioni. Ancora una volta la difficoltà è calcolare il semifattoriale (o anche il fattoriale) di un numero intero che però può essere trovato passo dopo passo, numero primo dopo numero primo, sfruttando i risultati dei calcoli precedenti.