Crivello di Luciano per trovare i numeri primi

Da Wikiversità, l'apprendimento libero.

CRIVELLO DI LUCIANO PER TROVARE I NUMERI PRIMI FORMULA GENERALE

|6Z-1|

DESCRIZIONE: Z = NUMERI INTERI Per ogni Z il risultato di questa formula produce un numero primo o il prodotto di due numeri primi o il prodotto di multipli di numeri primi. es. con Z=1 |(6*1-1)| = 6-1 = 5 es. con Z=-1 |(6*-1-1)| = -6-1= 7

es. con Z=2 |(6*2-1)| = 12-1 = 11 es. con Z=-2 |(6*-2-1)| = -12-1= 13 1° equazioni COL. C7 sono:Nx - ((6x)+1)* ((6y)+1)=0

e    Nx - ((6x)-1)*((6y)-1)=0  

Nx=49------49 - ((6x)+1)*((6y)+1)=0 x=1 y=1 c'è

                la soluzione Nx non è primo   

Nx=125----125 - ((6x)-1)*((6y)-1)=0 x=1 y=4 c'è

                la soluzione Nx non è primo         

Nx=283-----283 - ((6x)+1)*((6y)+1)=0 x=no y=no

       non c'è soluzione  intera il numero è primo

Nx=307-----307 - ((6x)-1)*((6y) -1)=0 x=no y=no

       non c'è soluzione intera il numero è primo

2°equazione COL. C5 sono: Nx- ((6x)-1)*((6y)+1)=0

    e     Nx - ((6x)+1)*((6y)-1)=0 

Nx=551-----551-((6x)-1)*((6y)+1)=0 x=5 y=3 c'è

                 la soluzione Nx non è primo

Nx=137----137-((6x)-1)*((6y)+1)=0 x=no y=no

       non c'è soluzione intera  il numero è primo

Si possono affermare con sicurezza alcune caratteristiche, che sono: 1) Moltiplicando i numeri della colonna C5 per quelli della colonna C7 il risultato cade nella colonna C5.

          es. 5*7=35   
          es. 5*13=65   
          es. 11*7=77   
          ecc. ecc.

2) Moltiplicando i numeri nella colonna C5 * C5 oppure i numeri nella colonna C7*C7 i risultati cadono nella colonna C7

          es. 5*5=25    
          es. 7*7=49     
          es. 5*11=55   
          es. 7*13=91 
          ecc. ecc.

3) I risultati della formula 2^n-1 o +1 cadono nelle colon. C5 o C7 in base se n e pari o dispari.

  esempi, 2^4+1=17       2^3-1=7  

quindi si può affermare che 2 elevata con una potenza pari + 1 il risultato cade nella colonna C5, mentre con potenza dispari -1 cade nella colonna C7. 4) Per quanto scritto sui punti 1 e 2 si posso individuare i numeri primi senza nessuna fattorizzazione.

    es. C5*C5 cioè 5*5=25  poi 
        C7*C7 cioè 7*7=49  poi
        C5*C7 cioè 5*7=35 

questi sono i più piccoli numeri che abbiamo, bene per quanto sopra scritto il numero 25 è il più piccolo dei possibili risultati, pertanto sulla colonna C7 i numeri che precedono 25 non possono avere alcun fattore pertanto sono primi 7-13-19. Lo stesso dicasi del 35 pertanto sulla colonna C5 i numeri che precedono il 35 non possono avere fattori pertanto sono primi 5-11-17-23-29. Inoltre sulla colonna C7 dove cade 7*7=49, i numeri tra il numero 35, menzionato prima, ed il 49 non possono avere fattori pertanto sono primi 31-37-43. Questo avviene su tutti i numeri che genera la formula |6Z-1|. 5) Possiamo scrivere queste equazioni:

  C5 - (C5*C7)=0    oppure  
  C7 - (C7*C7)=0    oppure 
  C7 - (C5*C5)=0   

Ritornando alla formula principale:

  Nx -((6Z-1)*(6Z-1))=0 se Nx non è primo, altrimenti se Nx è primo non c'è nessun Z che soddisfi l'equazione.
    es. 35-(5*7)=0   oppure  
    es. 53-((6Z-1)*(6Z+1))=0 , 53  non ha multipli) pertanto non può essere 0 con qualsiasi valore di Z.

Di conseguenza il numero Nx dell'equazioni che non hanno soluzione x,y intere è primo.

Questo che segue è un programma in Python per controllare se il numero immesso è primo altrimenti scrive i multipli del numero, è completo di commenti.

 ESEMPIO IN PYTHON:
  1. serve per calcolare il tempo necessario

from datetime import datetime

  1. inizializzo le due variabili

Nz=1 Nzz=1

  1. chiede di inserire un numero

Nx=input('inserisci il numero')

  1. stampa sul video il numero inserito

print (Nx)

  1. trasforma il numero inserito come intero, Python non ha limiti sui numeri interi

Ny=int(Nx)

  1. controlla il resto del numero inserito +1 e diviso 6
  2. questo per vedere su quale colonna cade il numero inserito

Nz=(Ny+1)%6 Nzz=(Ny-1)%6

  1. se Nz=0 il numero si trova sulla colonna del 5

if Nz==0:

   Nr= int((Ny+1)/6)
  1. se Nzz=0 il numero si trova sulla colonna del 7

if Nzz==0:

   Nr=int((Ny-1)/6)
  1. riepilogo sul video di questi dati:

print('(N+1)/6 se dovesse cadere sulla colonna del 5',(Ny+1)/6) # Ny+1 diviso 6 print('(N-1)/6 se dovesse cadere sulla colonna del 7',(Ny-1)/6) #Ny-1 diviso 6 print('(N+1)/6',Nz) #resto Nz print('(N-1)/6',Nzz) #resto Nzz print (' il numero capita sulla riga numero=',Nr) #il numero di riga dove capita il numero immesso

  1. inizio calcoli fattori colonna del 5
  2. legge il tempo attuale e lo stampa sul video

d=datetime.now() print ('leggo il tempo',d)

  1. se Nz=0 allora esegue i calcoli appropriati...

if Nz==0:

   out=0
   for i in range(Nr): #ciclo da 1 al numero di riga dove cade il numero inserito
       for ii in range(Nr):
           Nf=((6*i)-1)*((6*ii)+1)
           if Nf== Ny:
               print('fattore-1',((6*i)-1),'fattore-2',((6*ii)+1))
               out=1
               break
       if out==1:
           break

if Nzz==0:

  out=0
  for i in range(Nr):
     for ii in range(Nr):
          Nf=((6*i)+1)*((6*ii)+1)
          if Nf== Ny:
              print('fattore-1',((6*i)+1),'fattore-2',((6*ii)+1))
              out=1
              break
          Nf=((6*i)-1)*((6*ii)-1)
          if Nf== Ny:
              print('fattore-1',((6*i)-1),'fattore-2',((6*ii)-1))
              out=1
              break
          if out==1:
              break           

dd=datetime.now() print (dd-d)

                • IL RISULTATO

inserisci il numero 85849 85849 (N+1)/6 se dovesse cadere sulla colonna del 5 risultato = 14308.333333333334 (N-1)/6 se dovesse cadere sulla colonna del 7 risultato =14308.0 (N+1)/6 resto 2 (N-1)/6 resto 0

il numero capita sulla riga numero = 14308

leggo il tempo 2019-10-30 22:53:03.664062 1° fattore 293 2° fattore 293 0:00:05.051758 "tempo di calcolo"

Quando scrive che il numero cade sulla riga 14308 significa che Z=14308