viernes, 29 de diciembre de 2017

LA CONJETURA FUERTE DE GOLDBACH




Todo número par mayor que 2 puede escribirse como suma de dos números primos, fue enunciada por Christian Goldbach, fue formulada el 7 de junio de 1742 en una carta dirigida a Leonhard Euler.

La carta se puede descargar en este enlace:


En este video se explican las dos conjeturas, la fuerte y la débil (ya demostrada)



Entramos a destripar el contenido, cualquier numero se puede descomponer en la suma de dos números, como por ejemplo:

La descomposición de 10, en suma de número es :
los valores son 1 y 9
los valores son 2 y 8
los valores son 3 y 7
los valores son 4 y 6
los valores son 5 y 5

La descomposición no tiene por que ser única, pueden existir en el caso del cumplimiento, dos o más parejas de primos.

en la conjetura sólo nos interesan los impares, que son los que potencialmente pueden ser primos



Os dejo un programa en Python que hace la descomposición en sumas, para obtener sólo los impares, hay que cambier el 1 en rojo por un 2 así de fácil.

# scrip para comprobar la conjetura de Goldbach
# todo numero par mayor de 2 se puede descompomener en la suma de dos numeros primos


numero=int(input('Introduce el numero par a descomponer '))
if (numero%2)==0 and numero>=2:
    for n in range(1, (numero+1)//2+1,1):
        print('los valores son {0:d} y {1:d} '.format(n,numero-n))
        # en la descomposicion solo se toman los numeros impares
else:
    print('El numero {0:d} no es par o es menor o igual a 2 '.format(numero))

# colocamos un input para que no se cierre la ventana del sistema operativo
print("Fin de los calculos pulsa intro para terminar ")
tecla = input()# colocamos un input para que no se cierre la ventana del sistema operativo


# colocamos un input para que no se cierre la ventana del sistema operativo
print("Fin de los calculos pulsa intro para terminar ")
tecla = input()# colocamos un input para que no se cierre la ventana del sistema operativo

Ahora biene lo bueno, durante casi trescientos años no se ha podido demostrar o refutar la conjetura, con la llegada de los ordenadores, se está intentando comprobar mediante cálculo encontrar un número, cuyos pares de suma no tenga un par de primos, es decir se busca la suma de dos números impares en lo que en todas las sumas posibles no aparezcan dos números primos.

Si tenemos paciencia y un sistema computacional del estilo de los usados en minado de Criptomonedas, podemos intentar poner a prueba la conjetura, a continuación el código en Python, funciona para los pares mayores de 6, ¿por que?, el número 4, se descompone en 2+2 y 3+1, los primeros con pares (el 2 el único primo par) y en el segundo caso el 1, no es primo.



# todo scrip para comprobar la conjetura fuerte de Goldbach
# todo numero par mayor de 2 se puede descompomener en la suma de dos numeros primos
# todo a partir del 6 comprobando solo los impares

from sympy import isprime

maximo=int(input('Mayor numero a manejar='))
detectados=0 #casos que incumplen la conjetura

for numero in range(6,maximo+1,2):
    #print('Descomposicion del numero {0:d}'.format(numero))
    contador=0

    for n in range(1, (numero+1)//2+1,2):
        n_derecha=n
        n_izquierda=numero-n

        if (isprime(n_derecha)==True) and (isprime(n_izquierda)==True) and n_derecha+n_izquierda==maximo :
             contador=contador+1

    if contador==0:
        detectados=detectados+1
        print('No se cumple para el numero {0:d}'.format(numero))
        print('Por lo que la conjetura tieme un contraejemplo y no es cierta')
        print('Se detecta un caso de inclumplimiento para el numero {0:d} '.format(numero))
        break


print('No se detecta caso de inclumplimiento hasta el numero {0:d} '.format(numero))
#colocamos un input para que no se cierre la ventana del sistema operativo
print('Fin de los calculos pulsa intro para terminar ')
tecla = input()# colocamos un input para que no se cierre la ventana del sistema operativo


tengo que indicar que la comprobación de la primalidad se deja en manos del paquete sympy, concretamente de la funcion isprime ¿?
los códigos los podeis descargar del enlace:

en GitHub








LOS SIETE PROBLEMAS DEL MILENIO



Los Siete Problemas del Milenio, bueno ya son seis


El Clay Mathematics Institute (CMI por sus siglas en inglés) es una fundación privada sin ánimo de lucro que fue creada por un empresario multimillonario de Boston, Landon T. Clay. Tiene un objetivo claro: el desarrollo y la divulgación del conocimiento matemático. ¿Y que mejor forma que incentivarlo con premios monetarios?


En mayo de 2000, en Paris, el Instituto Clay de Matemáticas propuso, a la manera de Hilbert en 1900, siete problemas matemáticos respaldados por un premio de un millónn de dólares por problema para quien los resuelva
correctamente. La lista está conformada por los siguientes problemas:

1. La Conjetura de Birch y Swinnerton-Dyer
2. La Conjetura de Hodge
3. La Existencia y Suavidad de la Ecuación de Navier-Stokes
4.  La Hipótesis de Riemann
5.  La Conjetura de Poincaré (resuelto en 2003)
6.  El Problema P vs NP
7. La Teoría Cuantica de Yang-Mills


 Conjetura de Birch y Swinnerton-Dyer
Con el apoyo de mucha evidencia experimental, esta conjetura relaciona el número de puntos en una curva elíptica mod p con el rango del grupo de puntos racionales. Las curvas elípticas, definidas por ecuaciones cúbicas en dos variables, son objetos matemáticos fundamentales que surgen en muchas áreas: la prueba de Wiles de la Conjetura de Fermat, la factorización de números en primos y la criptografía, por nombrar tres. 
Conjetura de Hodge
La respuesta a esta conjetura determina qué parte de la topología del conjunto de soluciones de un sistema de ecuaciones algebraicas se puede definir en términos de ecuaciones algebraicas adicionales. La conjetura de Hodge es conocida en ciertos casos especiales, por ejemplo, cuando el conjunto de soluciones tiene una dimensión menor a cuatro. Pero en la dimensión cuatro es desconocido. 
Ecuación de Navier-Stokes
Esta es la ecuación que rige el flujo de fluidos como el agua y el aire. Sin embargo, no hay pruebas para las preguntas más básicas que uno puede hacer: ¿existen soluciones y son únicas? 
Hipótesis de Riemann
El teorema del número primo determina la distribución promedio de los números primos. La hipótesis de Riemann nos dice acerca de la desviación del promedio. Formulado en  1859 por Riemann, afirma que todos los ceros "no triviales" de la función zeta son números complejos con la parte real 1/2. 
 P vs NP problema
Si es fácil comprobar que una solución a un problema es correcta, ¿también es fácil resolver el problema? Esta es la esencia de la pregunta P vs NP. Típico de los problemas de NP es el problema de la ruta de Hamilton: dadas N ciudades para visitar, ¿cómo se puede hacer esto sin visitar una ciudad dos veces? Si me das una solución, puedo verificar fácilmente que sea correcta. Pero no puedo encontrar una solución tan fácilmente. 
Conjetura de Poincaré
En 1904, el matemático francés Henri Poincaré preguntó si la esfera tridimensional se caracterizaba por ser la única múltiple conectada de forma simple. Esta pregunta, la conjetura de Poincaré, era un caso especial de la conjetura de geometrización de Thurston. La prueba de Perelman nos dice que cada tres colectores se construye a partir de un conjunto de piezas estándar, cada una con una de las ocho geometrías bien entendidas.
Este problema ya se considera resuelto

Yang-Mills y Mass Gap
Experimento y simulaciones de computadora sugieren la existencia de una "brecha masiva" en la solución a las versiones cuánticas de las ecuaciones de Yang-Mills. Pero no se conoce ninguna prueba de esta propiedad.

 En el video de abajo se resumen los planteamientos de cada uno de los problemas, os recuerdo que hay 1.000.000 USD$ para la solución de cada problema

miércoles, 13 de diciembre de 2017

RECURSOS PARA COMPUTACIÓN CUÁNTICA

Microsoft , Google ,IBM y otras empresas de tecnología están apostando muy fuerte por la computación cuántica en sus dos vertientes fundamentales:


Algunos videos





Las dos + 1 líneas de trabajo fundamentales son
  • Desarrollo de ordenadores cuánticos
  • Implementación de lenguajes de programación que soporten las nuevas capacidades
  • La +1 sería el desarrollo de aplicaciones de las nuevas posibilidades
  
Os dejo unos enlaces sobre los avances que se supone han ido consiguiendo las distintas empresas

Noticia sobre simulador de cómputo cuántico de microsoft
Noticia sobre los avances de Google en este campo
Google Quantum Dream Machine 
La computación cuántica y su aplicación al entorno empresarial

 Nos vamos a centrar en los lenguajes de programación de este nuevo paradigma que por lo visto tiene un gran futuro pero que tiene un problema fundamental y paralizante, que se sepa todavía no hay ordenadores cuánticos de verdad, de vez en cuando saltan noticias sobre un avance espectacular, que después queda en sólo un paso más.


Sobre herramientas de programación y herramientas dejo los siguientes enlaces:

Quantum Lenguajes and Tools 
Lenguaje QCL
http://www.mathematica-journal.com/issue/v8i3/features/hertel/index.html
Lenguaje Q# de Microsoft

Microsoft ha lanzado su lenguaje Q#, del que os dejo dos enlaces aparte del arriba de descarga del Kit, está integrado en Visual Studio.

https://www.microsoft.com/en-us/quantum/development-kit
https://docs.microsoft.com/es-es/quantum/quantum-concepts-1-intro?view=qsharp-preview

También hay algunos vídeos sobre los avances realizados por algunas empresas









 








sábado, 9 de diciembre de 2017

LOS NÚMEROS PRIMOS DE MERSENNE y II PARTE

En un post anterior ya se habló de los primos de Mersenne os os dejo el enlace:

Mersenne planteó la idea de generar números primos mediante la expresión 2^n-1, es decir elevando el número 2 a una potencia y restando 1.


Ahora quedaba demostrar que el número generado era primo, intuyó que para que la expresión generase un número primo, n ha de ser primo, pero era condición necesaria pero no suficiente, ya que había valores de n primos que no generaba con la expresión 2^n-1, un número primo.

Con esta base, supuso que con valores 2,3,5,7,13,19,31,67,127,257, grupo de primos no mayores de 257 que generarían un numero de Mersenne primo.

Para la generación de los números de Mersenne os dejo el siguiente código en Python

# scrip para calcular los n primeros numeros de mersenne

n_mersennne=int(input('Números de Mersenne a Calcular '))
for n in range(0, n_mersennne+1):
    mersenne = 2 ** n - 1
    print('El numero {0} de Mersenne es {1}'.format(n, mersenne)
)


# colocamos un input para que no se cierre la ventana del sistema operativo
print("pulsa intro para terminar")
tecla = input()# colocamos un input para que no se cierre la ventana del sistema operativo


En el script no de diferencian los que son primos de los que no lo son
 

Evidentemente a mayor n, mayor el número de cifras y mayor el tiempo para comprobar si el número es primo o no.

En 1876, Édouard Lucas (mencionado en el post anterior a este), ideó un método para verificar si un determinado número de Mersenne era o no primo, descubrió que Mersenne no había incluido los n  61,89,107 y además el número para n= 67, no era primo.

El método fue posteriormente perfeccionado por Lehmer hijo, el criterio es el siguiente:

Un número de Mersenne es primo si divide a otro número denominado número de Lucas-Lehmer, dichos números forman una sucesión de la forma Ln=(Ln-1)^2-2, para n mayores o iguales de 3.




 Para calcular los primeros números de Lucas-Lehmer os dejo otro programa en Python

# scrip para calcular los n primeros numeros de Lucas_Lehmer

lucas = 14 # primer número de Lucas-Lehmer
for n in range(3, 22):
    print("El numero  ", n, "de Lucas_Lehmer=", lucas)
    lucas = lucas ** 2 - 2

# colocamos un input para que no se cierre la ventana del sistema operativo
print("pulsa intro para terminar")
tecla = input()# colocamos un input para que no se cierre la ventana del sistema operativo
 

Importante no introducir n muy grandes, por lo del desbordamiento

 Nos queda pues comprobar por este método la primalidad de los números de Mersenne mediante el método, evidentemente mediante otro código:

# scrip para calcular los n primeros numeros de mersenne

lucas = 14
for n in range(3, 30):
    nmersenne = 2 ** n - 1
    if (lucas % nmersenne) == 0:
        print("El numero  2^", n, "-1=", nmersenne, " es Primo")
    lucas = lucas ** 2 - 2
 

como podeis comprobar se usa el método de la fuerta bruta, los n no son primos, si no una secuencia de los valores de n entre 3 y 29.