la conjetura de Goldbach
![]() | Una conjetura es una afirmación como probablemente cierto, pero no está probado todavía. Un voto demostrado su validez se convierte en un teorema. la conjetura de Goldbach es uno de los más antiguos problemas que deben resolverse, se remonta a 1742, fue enunciada por Euler a Goldbach y se actualizan de la siguiente manera: |
Cada número natural mayor que 2 puede 'ejercicio escrito como la suma de dos
primos.
Por ejemplo:
4 = 2 + 2
6 = 3 + 3
8 = 3 + 5
10 = 3 + 7 = 5 + 5
12 + 5 = 7
14 = 3 + 11 = 7 + 7
16 = 3 + 13 = 5 + 11
Tratando de demostrar su inexactitud
En una conjetura que podemos hacer dos tipos de manifestaciones, que demostrar su veracidad o su inexactitud. Obviamente uno excluye al otro. Vamos a tratar de probar que la conjetura es falsa, para ello sólo para encontrar un contraejemplo lienzos que la declaración es falsa. Así que en nuestro caso, simplemente encontrar un número único, que no es la suma de dos primos. Para encontrar este número a escribir un programa.
Algunas consideraciones
Todos los números primos son impares excepto el 2. Esto es cierto para la definición de número impar. El número primo 2 añadido a cualquier otro número como el primer resultado de un número impar. El único caso en que dos añadió otro de los números primos se traduciría en un número par es 2 + 2. De esto se desprende que el 4 es el único número que puede escribirse como la suma del número primo 2 con otro número primo. Programa sin tener en cuenta los 2 primos y todos los números aún mayor que cuatro.
Descomponer el problema en sub problemas
Las acciones que hace que el programa puede esquematización en una sucesión de fases distintas:
- Buscar todos los números primos entre 3 y n
- Tome todos los pares de números primos (p1, p2) tales que su suma no supere el n (es decir, p1 + p2 <= n) y consideramos que (p1, p2), entonces se descartará (p2, p1).
- Marque la misma de 6 a n si son el resultado de + P2 P1 para cada pareja (p1, p2) encontraron la vez anterior.
- Imprimir todos los números pares no están marcados como una suma de números primos.
Criba de Eratóstenes
Sombrías para todos los números primos de 3 a n no es un método antiguo que se conoce como la Criba de Eratóstenes. Es para escribir todos los números del 2 al n y elimine todos los múltiplos de 2 (no incluidos), todos los múltiplos de 3 (no incluidos), todos los múltiplos de 5 (no incluido) y así sucesivamente. Los números de "supervivientes" son todos y sólo los números primos entre 2 y n.
Luego se utiliza una bandera vector v, la idea y "simple, marcamos todos los múltiplos de los números 2, 3, 5, etc .. por lo que el resto son en primer lugar. Para ahorrar memoria que tengo de la compañía por tres y se examina sólo los números impares, por ejemplo:
índice de la portadora (s): 0 1 2 3 4 5 6
información (j): 3 5 7 9 11 13 15
v [i]: TTTFTTF
IAJ utilizar para activar la función j = 2 * i + 3
por el contrario i = (j - 3) / 2
Nota: j - 3 siempre un número divisible por dos, como ij son todos los impares.
long int n ) { riempi_v void (int n larga) ( k ; int i, k; i = 0 ; i < Size ( n ) ; i ++ ) { for (i = 0; <(i Tamaño n) i + +) ( v [ i ] == TRUE ) if (v [i] == TRUE) k = 3 ; ( 2 * i + 3 ) * k < n + 2 ; k = k + 2 ) for (k = 3, (2 * i + 3) * n <k + 2 k = k + 2) i * k + 3 * k - 3 ) / 2 ] = FALSE ; [v (2 * i * k * botó 3 - 3) / 2] + = FALSE; ) )
Backtracking algoritmo
Una vez que el vector v sé cuáles son los números primos hasta n
Ahora encuentro que todos los pares (p1, p2). Para ello utiliza un algoritmo que utiliza el método de dar marcha atrás. El algoritmo de "poda" el algoritmo de árbol para que no se consideran todos los pares de números que no le interesan. Así que para ser lo más optimizada posible, nos daríamos cuenta de que la optimización de este programa es vital si queremos lograr buenos resultados.
/ * Encuentra todos los pares y la suma de los números primos citadas anteriormente * / long int n , int i , int p1 , int p2 ) { backtraking vacío (n int largo, int i, int p1, p2 int) ( int x; i == 2 ) { if (i == 2) ( p2 ) / 2 ] = FALSE ; [Igual (p1 + p2) / 2] = FALSE; / * Printf ("(% d,% d) \ n", p1, p2) * / ) más ( i == 0 ) if (i == 0) x = 3 ; x != - 1 ; x = primo_successivo ( n , x ) ) { for (x = 3, x, = - 1, x = primo_successivo (n, x)) ( i + 1 , x , p2 ) ; backtraking (n, i + 1, x, p2); ) más / ** * Inicializa x p1 es verificar la conjetura Goldback. * Lugar primo_successivo x = (n, p1) para encontrar todos iguales * Datos de p1 + p2 con p1! P2 = * / x = p1 ; x != - 1 ; x = primo_successivo ( n , x ) ) { for (x = p1 x! = - 1, x = primo_successivo (n, x)) ( p1 + x <= n ) if (p1 + x <= n) i + 1 , p1 , x ) ; backtraking (n, i + 1, p1, x); ; otra break; ) ) )
Encontrado en el par (p1, p2) es la suma y actualizar el mismo transportista. La compañía también tiene tamaño n / 2, cada elemento se corresponde con un número par.
Hemos desarrollado los puntos 1, 2 y 3 de nuestro problema, tenemos que recorrer el vector de la igualdad e imprimir sólo el índice de la presencia de un número par que no es la suma de dos números primos.
i = 0 ; i < n / 2 ; i ++ ) for (i = 0; i <n / 2; i + +) pari [ i ] == TRUE ) if (igual a [i] == TRUE) "%d:i = %d \n " , pari [ i ] , 2 * i ) ; printf ("% d: i =% d \ n", que [i], 2 * i);
Resultados
Usted se dará cuenta de las pruebas effettaundo que el aumento de n aumenta el tiempo de ejecución. Con un equipo a Intel 5336,88 bogomips pasé 5 días con n igual a 100.000.000.
la conjetura de Goldbach se supone que es verdadera por el hecho de que la probabilidad de un número par es la suma de dos primos se incrementa con el número. Hay un proyecto de computación distribuida que hasta ahora ha comprobado la conjetura de hasta 2 * 10 17 (cuando escribo.)
Otra conjetura
No quiero comparar mi, pero Euler y la conjetura de Goldbach de que otros puedan encontrar interesante que passt su mente durante la redacción del programa. Goldbach es un refinamiento de la expresión.
Todos los números naturales superiores a 6 y también puede ser escrito como la suma de dos primos p1 y p2 tal que p1 es diferente de p2
Es su prueba. Les puedo asegurar que hasta el 10 8 es cierto.















2 Respuestas a "Conjetura de Goldbach"
Chemla - 06 de marzo 2009
Bonjour Linux!
De voir Que le très feliz du monde à cette Libre interesados conjetura. Je en autour de aficionados depuis travaille 3 ans et demi alrededores et al Consigna errances toutes mes (!) À l'adresse http://denise.vella.chemla.free.fr .
Un gran indulgencia feuilleter avec une ...
ayudante de Touré, sugerencia, bienvenue remarque la noche.
Logiciel Libre et que vivo!
Denise
Thegamer - 24 de marzo 2009
Realmente bonito ... No puedo esperar a probar el código!
Deja una respuesta