Conjectura lui Goldbach

O ipoteză este o declaraţie ca, probabil, adevărat, dar nu a fost încă dovedită. Un vot a demonstrat valabilitatea acestuia devine o teoremă. Conjectura Goldbach este una dintre cele mai vechi probleme care trebuie rezolvate, datează din 1742, a fost enunţat de Euler la Goldbach şi reformulat după cum urmează:

Fiecare număr natural mai mare decât 2 poate "să exercite scris ca suma a doi
PRIMES.

De exemplu:
4 = 2 + 2
3 + 6 = 3
8 = 3 + 5
10 = 3 + 7 = 5 + 5
12 + 5 = 7
14 = 3 + 11 = 7 + 7
16 = 3 + 13 = 5 + 11

Încearcă să dovedească inexactitate sale

Pe o ipoteză putem face două tipuri de demonstraţii, putem dovedi corectitudinea sau inexactitatea sale. Evident, o exclude de altă parte. Vom încerca să dovedească faptul că presupuneri este falsă, pentru a face acest lucru doar pentru a găsi un contraexemplu pînzele că declaraţia este falsă. Deci, în cazul nostru, pentru a descoperi doar un singur număr care nu este suma a două numere prime. Pentru a afla acest număr vom scrie un program.

Unele consideraţii

Toate numere prime sunt impare, cu excepţia 2. Acest lucru este valabil pentru definirea număr impar. Număr prim 2 adaugă la orice alt număr în primul rezultat dintr-un număr impar. Singurul caz în care doi adăugat un alt număr prim ar duce la un număr şi mai este de 2 + 2. Din aceasta rezultă că numărul 4 este singurul care poate fi scrisă ca suma număr prim 2 cu un alt număr prim. Programul fără a ţine seama de 2 PRIMES şi toate numerele chiar mai mare decât patru.

Descompune problema în sub probleme

Acţiunile care face ca programul poate schematizarea într-o succesiune de etape:

  1. Cauta toate numere prime de la 3 la n
  2. Luaţi toate perechile de numere prime (P1, P2), astfel încât suma lor să nu depăşească n (adică, P1 + P2 <= n) şi, dacă se consideră (P1, P2), atunci va fi eliminată (P2 P1).
  3. Mark aceeaşi 6 la n, dacă acestea sunt rezultatul P1 + P2 pentru fiecare cuplu (P1, P2) constatate anterior.
  4. Toate numerele de imprimare, chiar nu sunt marcate ca o sumă de numere prime.

Ciurul lui Eratostene

Grim pentru toate numere prime de la 3 la n există o metodă cunoscută sub numele vechi Ciurul lui Eratostene. Este pentru a scrie toate numerele de la 2 la N şi apoi a şterge toate multipli de 2 (exclus), toate multipli de 3 (excluse), toate multiplu de 5 (nu sunt incluse), şi aşa mai departe. Numerele de "supravietuitori" sunt toate numerele de prim doar între 2 şi N.

Apoi, vom folosi un steag vectorul v, ideea şi "simple, marca toate numerele multiplu de 2, 3, 5, etc .. astfel încât sunt rămase prim. Pentru a salva memorie am de la operatorul de transport de trei şi examinate numai numerele de ciudat, de exemplu:

transportatorul indicele (i): 0 1 2 3 4 5 6
Informaţii (j): 3 5 7 9 11 13 15
v [i]: TTTFTTF

iaj folosi pentru a comuta funcţia j = 2 * i + 3
invers i = (j - 3) / 2
Notă: j - 3 întotdeauna un număr divizibil cu doi ca ij sunt toate ciudat.

  long int n ) { riempi_v nule (int n lung) (
   k ; int i, k;
   i = 0 ; i < Size ( n ) ; i ++ ) { pentru (i = 0; i <Dimensiune (n), i + +) (
     v [ i ] == TRUE ) dacă (v [i] == TRUE)
       k = 3 ; ( 2 * i + 3 ) * k < n + 2 ; k = k + 2 ) pentru (k = 3, (2 * i + 3) * k <n + 2; k = k + 2)
         i * k + 3 * k - 3 ) / 2 ] = FALSE ; V [(2 * i * k * k 3-3) / 2] + = false;
   )
 ) 

Algoritm backtracking

Odată ce v vectorul ştiu care sunt numere prime pana la n.
Acum, eu trebuie să găsească toate perechile (P1, P2). Pentru a face acest lucru folosind un algoritm care foloseste metoda de backtracking. "Algoritm de prune" pomul recursions pentru a nu lua în considerare toate perechile de numere care nu vă interesează. Deci, pentru a fi la fel de optimizate ca este posibil, am realiza că optimizarea acestui program este vital, dacă vrem să realizăm rezultate bune.

  / * Gaseste suma si toate perechile de numere prime găsit de mai sus * /
 long int n , int i , int p1 , int p2 ) { backtraking nule (int n lung, int i, int p1, int p2) (
   int x;
   i == 2 ) { dacă (i == 2) (
     p2 ) / 2 ] = FALSE ; [Egal (P1 + P2) / 2] = false;
     / * Printf ("(% d,% d) \ n", P1, P2) * /
   )
   altceva (
     i == 0 ) dacă (i == 0)
       x = 3 ; x != - 1 ; x = primo_successivo ( n , x ) ) { pentru (x = 3, x,! = - 1, x = primo_successivo (N x)) (
         i + 1 , x , p2 ) ; backtraking (n, i + 1, x, P2);
       )
     altfel
       / ** 
         Iniţializa X * P1 este de a verifica conjectura Goldback. 
         * Locul primo_successivo x = (n, p1) pentru a găsi toţi egali 
         * Datele de la P1 + P2 cu p1! = P2 
         * /
       x = p1 ; x != - 1 ; x = primo_successivo ( n , x ) ) { pentru (x = x p1,! = - 1, x = primo_successivo (N x)) (
         p1 + x <= n ) în cazul în care (P1 + x <= n)
           i + 1 , p1 , x ) ; backtraking (n, i + 1, P1, x);
         ; altceva pauza;
       )
   )
 ) 

Am gasit pereche (P1, P2) este suma şi să actualizeze acelaşi operator de transport. Transportatorul are, de asemenea dimensiune n / 2, fiecare element corespunde un număr par.

Am dezvoltat punctele 1, 2 şi 3 din problema noastră, avem de a parcurge vectorul de egal şi de imprimare numai indicele în prezenţa unui număr chiar că nu este suma a două numere prime.

  i = 0 ; i < n / 2 ; i ++ ) pentru (i = 0; i <n / 2; i + +)
     pari [ i ] == TRUE ) în cazul în care (egal cu [i] == TRUE)
       "%d:i = %d \n " , pari [ i ] , 2 * i ) ; printf ("% d: i =% d \ n", care [i], 2 * i); 

Rezultate

Veti observa effettaundo de teste care n creşte creşterea timpului de executie. Cu un computer la Intel 5336.88 bogomips am petrecut cinci zile cu n egal la 100.000.000.

Conjectura lui Goldbach se presupune a fi adevărat de faptul că probabilitatea ca un număr, chiar fiind suma a două numere prime creşte cu numărul. Există un proiect de calcul distribuit, care a verificat până în prezent presupuneri până la 2 * 10 17 (când scriu.)

O altă ipoteză

Nu vreau să compare mine, dar Euler şi conjectura Goldbach că alte pot găsi interesant faptul că am passt mintea sa scris în timpul programului. Goldbach este un rafinament al rostirii.

Toate numerele naturale mai mare de 6 şi pot fi, de asemenea, scris ca suma a două numere prime P1 şi P2, astfel încât P1 este diferit de la p2

Este dovada. Pot să vă asigur că până la 10 8 este adevărat.

2 Răspunsuri la "Conjectura lui Goldbach"

  1. Chemla 03 06 - 2009

    Bonjour Linux!
    De Voir que le très fericit du monde à cette presupuneri interesate gratuit. Je en autour amatori depuis travaille 3 ans et demi împrejurimi et să expedieze toutes errances MES (a!) L'Adresse http://denise.vella.chemla.free.fr .
    O mare indulgenţă feuilleter avec une ...
    Toute aghiotant, sugestie, seara Bienvenue Remarque.

    Logiciel libre et que viu!
    Denise

  2. Thegamer - 2009-03-24

    Foarte frumos ... eu nu pot să aştept să încercaţi codul!

Plecare un Reply