Autor Tema: Conjetura Goldbach por el absurdo

0 Usuarios y 1 Visitante están viendo este tema.

06 Enero, 2020, 10:57 am
Respuesta #20

feriva

  • Matemático
  • Mensajes: 9,054
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • No soy matemático, eso es una etiqueta.

Hola, Richard.

La mañana de Reyes me trae hablar de la Conjetura :)


Pero es discutible o demostrable, por inducción, defino el primer primo , conjeturo para n y demuestro para n+1 , no era así? el producto de enteros siempre es entero... con n arbitrariasmente grande cual sería la diferencia.


Pero ha de ser numerable. El producto de dos enteros (finitos, como deben ser por definición) es otro número finito, porque has multiplicado una cantidad de 2, una cantidad finita de ellos; ahí funciona la propiedad de cerradura algebraica, como con la suma. Pero si consideras que la cantidad de factores tiende a infinito, ya no funciona la clausura. Pasa igual con esto, \( \dfrac{1}{n},\,\dfrac{1}{n^{2}},\dfrac{1}{n^{3}}...
  \), son números reales, pero si multiplicas una cantidad de ellos que tienda a finito el resultado es un infinitesimal, no un real.

En la medida que multiplicas más primos, el número también se hace más grande y tiene más zonas distintas donde no caben más que unos pocos compuestos (“pocos” dicho por comparación con todos los que hay en el intervalo completo)

Si tienes \( a+b=2n
  \), en el intervalo \( b-a
  \) no puede haber más de un múltiplo de un primo mayor o igual a la distancia \( |b-a|
  \), porque dos múltiplos necesitan estar a una distancia mayor que \( |b-a|
  \). Pero no sólo eso; algunos, siendo más pequeños, tampoco caben de dos en dos, porque al ser compuestos impares necesitan estar multiplicados por un número mayor que 2, por lo menos tiene que ser 3; otros más pequeños ya no cabrán multiplicados por 4 ó 5, pero sí por 3... etc. Si analizas esto con ejemplos, ves que hace que siempre haya zonas donde sumen dos primos y cada vez más; y de ahí que por término medio, a la larga, vaya habiendo más parejas. Claro que, una cosa es “ver” cómo va funcionando y otra distinta poder demostrarlo; eso es lo que quisiéramos todos.

Aquí hay un mecanismo en ese sentido, estoy completamente seguro de ello, pero demostrarlo pasa por un análisis combinatorio tremendo, verdaderamente muy difícil; y, si no la han demostrado los mejores matemáticos, no la voy a demostrar yo, soy consciente de ello. Habría que asegurar algo más sobre los primos, Bertrand se queda corto, aunque sirve para tener ciertas seguridades, se queda corto; si por lo menos estuviera ya demostrada la de Legendre (la cual se cumple prácticamente seguro a decir de los expertos) https://es.wikipedia.org/wiki/Conjetura_de_Legendre quizá se pudiera hacer algo más.

Precisamente, cuanto más grande es N, con más seguridad se puede cumplir la conjetura. Pasa como con la conjetura débil de Goldbach, la de los impares, estaba asegurada por Vinogradov hace ya bastantes décadas para un número lo “suficientemente” grande, sin que se hubiera acotado todavía ese número; la demostró hace poco Harald Helfgott, como sabrás: todo número impar mayor que 7 se puede escribir como suma de tres primos. Si se considerara un número tan grande como el que dices, este teorema sería mentira. No sólo éste, también la demostración del último de Fermat, donde sí que existen “números” de infinitos factores que cumplen la igualdad \( x^{n}+y^{n}=z^{n}
  \); busca por ahí la demostración para n=4, ahí lo puedes ver, fíjate lo que pasa con el descenso al infinito.


Si es par porque es múltiplo de 2 por definición. reitero sabemos como acaba, pero no cuando como ni con que empieza.


Si ese número que dices es par, según eso, raíz de 2 sería el cociente entre dos pares, porque lo que se demuestra en la célebre y centenaria prueba es que en la fracción \( \dfrac{a}{b}
  \), tanto “a” como “b”, están compuestos de infinitos factores 2; se demuestra que no es reducible, pero en concreto respecto del factor 2.

Si está compuesto de infinitos primos (o tiende, si quieres decirlo así) por definición, son números hiperreales, no reales. Tengo oído que existe un modelo no estándar que considera estos números, pero, aunque hable de oídas... sospecho que eso es el chocolate del loro, que no sirve para mucho más de lo que sirve el modelo estándar.

Cuando se plantea éste y otros problemas, como el de Fermat, en la época no existe la teoría de conjuntos, hay números con decimales y sin decimales. Los enunciados en esa época hay que entenderlos así (según sugiere Wiles, en una entrevista que se le hizo después de demostrar el teorema de Fermat): “nunca encontrarás un número...”. Si demuestras que nunca nadie encontrará un número que cumpla o no cumpla lo que rece el enunciado, entonces demuestras que es verdad. Los que no encontrará nadie no valen, si valieran... fallarían un montón de teoremas.


tampoco está definido el máximo de los números primos , ni el contenido total del conjunto de los números primos


Es que no es un conjunto literalmente hablando, es más una clase de Rusell en el sentido que lo estás entendiendo.

Ocurre una cosa, \( \mathbb{N}
  \) tiene infinitos elementos; y aquí surge una paradoja que hay que resolver poniendo las definiciones necesarias: si tiene infinitos elementos, es imposible que no haya naturales con una cantidad infinita de cifras. Claro, imagina... si por cada 10, 100... vamos escribiéndolos con una cifra más, como son infinitos, los “últimos” tendrán que tener infinitas cifras. Ahí está el concepto, no son infinitos de “golpe”, como si estuvieran metidos en un saco, son potencialmente infinitos, numerables, su infinitud consiste en que “nunca encontraremos el último”. Si se consideran “todos”, no se pueden definir por extensión sin que nos asalte esa paradoja, hay que definirlos por comprensión. Esto \( N=\prod\limits_1^\infty p_i \) no es un número real.

No es real ningún número cuya parte entera sea una “cantidad” infinita. Si consideras un irracional, 3,14... su valor es finito, vale menos de 4 y más de 3, está acotado; todo número real tiene un valor finito. Pero, pese a ello, no pasa como con los enteros, ya que, como éstos tienen mantisa y éstas sí pueden tener infinitos números (hay infinitas mantisas distintas) sí existen de “golpe” en el saco; pero ningún real tiene valor infinito.

Saludos.

11 Enero, 2020, 12:00 pm
Respuesta #21

feriva

  • Matemático
  • Mensajes: 9,054
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • No soy matemático, eso es una etiqueta.
Hola, Richard.

Se me ha ocurrido una forma de ir comprobando la conjetura que quizá te podría servir; he probado sólo con mil números más desde \( 4\times10^{18}
  \) para ver cómo funcionaba el programa.

Es éste

Código: [Seleccionar]
from sympy import*

N=4*10**18
n= N/2
k=n

A=set()

def f():

global N,n,p,k,A

p=prevprime (k)

q=N-p

for j in range (2,1000,2):

if isprime (q+j):

A.add(j/2)
k=p

for i in range (1000):

f()

B= list (A)
B.sort()

l=(B[len(B)-1: len(B)])

for c in (l):
c=int(c)

c2=sum(B)

Bueno, lo hice según se me ocurrían las cosas, se puede optimizar mucho, ahora lo he estado mirando y es un desastre; por ejemplo, se puede hacer que cuando estén todos hagan un break, también usar nextprime, que es más rápido que ir sumando pares... pero es la idea

Básicamente, lo que hace es esto:

Empiezo con un ejemplo de pocos números para que se vea:

\( 0,1,2,3,4,5,6,{\color{blue}7},(8),{\color{blue}9},10,{\color{blue}11},12,{\color{blue}13},14,{\color{blue}15},16
  \)

9+2 es primo, y es 7+4, por lo que se cumple para el par siguiente 7+(9+2)=18

11+2 es primo, y es 7+6, por lo que se cumple para el par siguiente a 18, 7+(11+3)=20...

etc.

El programa empieza eligiendo el primo “p” más cercano a N/2, menor que N/2, y va sumando a “N-p” los pares 2, 4, 6... hasta 998. Cuando N-p es primo, guarda ese par -pero divididos entre dos- en un set, en un conjunto “A”; de forma que va a ser un conjunto de naturales 1,2,3... donde en principio no sabemos cuántos van a faltar.

Después, toma el primo anterior a “p” y repite el proceso. Si aparecen pares repetidos (que salen) el comando “set” los elimina; funciona como un conjunto de verdad, todos los elementos que guarda son diferentes.

Esto lo repito con 998 primos hacia “atrás”, cada vez más pequeños y consecutivos (y se ve que es suficiente para la comprobación, al menos para el par desde el que parto).

Una vez que termina ese bucle y el conjunto “A” está lleno, lo paso a una lista (una matriz o vector) y la ordeno; quedando así 1,2,3,4... etc. Después, uso el comando “sum”, que suma todos los elementos de la lista. Si están todos, tiene que coincidir con la suma según la progresión aritmética; entonces el programa toma el último elemento de la lista para hacer la cuenta y compara. Y sale que están todos lo que quiere decir que se cumple hasta \( 4\times10^{18}+998
  \).

Es poco, es una prueba que no tarda nada; haciéndolo con 10000 ó 100000... pues tardará bastante, pero sería dedicarle un tiempo todo los días e ir comprobando.

Pero lo interesante es que estén todos tomando unos tramos tan cortos (en comparación con la longitud del número) a partir de cada primo (y sin tomar todos, sólo 998, y como mínimo hay 95238095238095238).

Spoiler

python borrador7.py

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499]

Se cumple hasta N + 998

[cerrar]

Saludos.


11 Enero, 2020, 07:25 pm
Respuesta #22

Richard R Richard

  • Ingeniero Industrial
  • Aprendiz
  • Mensajes: 419
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Oh Oh!!! me contestó... y ahora qué le digo...
Ok , gracias por compartir la idea!!!, Así cuentas cuantas parejas te quedan para cada par N.


mi idea es la siguiente en \( N_i \) coloco el número par de dónde empiezo la comprobación.
\( p_i \) es una variable que toma el valor de todos los primos que almaceno en un archivo, (no compruebo que es primo, ya tengo una lista segura de los que son, obtenida de la criba de eratóstenes)
 Cálculo \( N-p \) , y lo busco en la lista de los primos....

Si lo encuentra en la lista, \( N_i \) cumple la conjetura, entonces salto al siguiente N_{i+1}, sumándole  dos unidades \( N_{i+1}=N_{i}+2 \)

si no está en la lista, es porque es compuesto, entonces salto al siguiente primo  \( p_{i+1} \)

si llego a un primo \( p_i>N/2 \) entonces \( N \) no cumpla la conjetura, y tengo lo que busco.

la limitaciones la comente tengo 15M de primos en un archivo de 202 MB que son los primos que hay hasta casi el 300M, pero para llegar a tener todos los primos por debajo de 1e18  necesito terabits de tamaño de archivo.
si lo importante es solo saber el orden entonces el archivo lo creo como 1 para primos y 0 para compuestos, puedo ir determinando el de valor N, p y N-p a cada paso y contar hasta N-p para ver si es un 1 o un 0 luego sabría si es primo o no, pero, el tamaño del archivo solo se comprime hasta solo un 5 % máximo que lo dicho anteriormente... para mejorar esos 1e18 de N , debo tener mejores recurso informáticos de lo que es una simple PC hogareña.
Si la mejorara, podría crear un archivo escrito en 1 y 0 en el orden inverso de mayor a menor, lo que facilitaría la tarea de empezar a buscar comparando los primos mas cercanos de N/2 con los mas lejanos de la primera lista, haciéndose lento y tedioso, cuando se aproxima a \(  N\cong Max(P_i)/4 \)







Saludos  \(\mathbb {R}^3\)

11 Enero, 2020, 10:49 pm
Respuesta #23

feriva

  • Matemático
  • Mensajes: 9,054
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • No soy matemático, eso es una etiqueta.

Hola, Richard.

¿En qué lenguaje programas?
Yo tengo aquí un amigo, Víctor Luis, que hace años programaba en Pascal; le hablé de Python, de lo fácil qué era, de sus ventajas... y ya no volvió a programar en Pascal. Yo mismo aprendí hace no muchos años Python, viendo vídeos y leyendo tutoriales; merece mucho la pena (y no vendo nada, no pertenezco a ninguna compañía ni nada así; además es gratis).



la limitaciones la comente tengo 15M de primos en un archivo de 202 MB que son los primos que hay hasta casi el 300M, pero para llegar a tener todos los primos por debajo de 1e18  necesito terabits de tamaño de archivo.

Si es por hacer “artesanía informática”, me parece bien; pero hoy en día no es necesario guardar primos para estas cosas. Se puede comprobar si un número de... vamos a poner 40 cifras, es primo o no en unas décima de segundo o una cosa así; se puede decir que se percibe instantáneamente. Si se programa en Python, por ejemplo, existen módulos que tienen unos comandos que te dicen si es primo o no, como el comando “isprime” del módulo sympy.

Pega este código en esta página, https://live.sympy.org/ en la parte de abajo, y luego pincha en “Evaluate”

a=58945876895847890934948756898782345897823459872983475785984758111182783982983703878736748726738784312131389677

if isprime (a):
   print "es primo"
else:
   print "no es primo"

es de 110 cifras y lo he tecleado a voleo.

Si quieres saber cuál es el siguiente primo a ese número, pega este código

a=58945876895847890934948756898782345897823459872983475785984758111182783982983703878736748726738784312131389677

nextprime (a)

Y te lo da

58945876895847890934948756898782345897823459872983475785984758111182783982983703878736748726738784312131389747

Fíjate lo que tarda, nada prácticamente; y es un número de 110 cifras.

Y tiene muchas más cosas, como la función primepi, que te da la cantidad exacta de primos (si son muy, muy grandes, no puede, eso sí) o la función prime (n); que te da el primo “n”, siendo n=1 para el primo 2, etc. También tiene la función totient(n), que te da la cantidad de coprimos con “n” menores que “n” hasta 1. La función gcd(a,b) que te da el mcd... Y muchas cosas más todavía, funciones automáticas para combinatoria, para ecuaciones, integrales... para todo.

Yo empecé aprender algunas cosas con estos vídeos

https://www.youtube.com/watch?v=jolNWCxxyw8

Saludos.

12 Enero, 2020, 12:30 am
Respuesta #24

Richard R Richard

  • Ingeniero Industrial
  • Aprendiz
  • Mensajes: 419
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Oh Oh!!! me contestó... y ahora qué le digo...
 1e+18  gracias .... en la pagina lo he probado, y es velocísimo.... creo que me he puesto viejo de golpe.... habrá que aprender a manejarlo....como a los autos... voy a dar un par de vueltas  y te comento de que me entero.

desde hace 35 años  programo basic,.. y muchos otros de los lenguajes similares, que fueron apareciendo,... pero hace mucho que no innovo.... vere si me resulta....

por lo pronto la descarga del software, requiere que actualice windows con sus service packs, así que sino aparezco por un tiempo es porque una lucha contra la SKYNET de Bill Gates  ha podido conmigo.



Saludos  \(\mathbb {R}^3\)

12 Enero, 2020, 02:13 am
Respuesta #25

manooooh

  • Matemático
  • Mensajes: 2,966
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola Richard R Richard


desde hace 35 años  programo basic,.. (...)

Pues qué buena noticia enterarse de que alguien más le interesa Basic.

¿Usás el Visual Studio (por ejemplo versión 2010) para programar?

Pregunta off-topic:

¿Sabés conectar el Visual con una BD externa? A mis alumnos de secundaria les enseño a hacerlo con Access pero con SQL parece bastante más complicado (tanto la conexión como la programación con simples tablas -- No he encontrado una guía en Internet ni un asistente del Visual Studio para ello).

Gracias y saludos

12 Enero, 2020, 02:45 am
Respuesta #26

Richard R Richard

  • Ingeniero Industrial
  • Aprendiz
  • Mensajes: 419
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Oh Oh!!! me contestó... y ahora qué le digo...
yo para conectar con mysql

uso en un modulo publico

Código: [Seleccionar]
Public Sub Conectar()
Set Conn = Nothing
Set Conn = CreateObject("Adodb.Connection")
strconn = "DRIVER=MySQL ODBC 5.1 Driver;UID = root;Port = 3306;Database = ef;SERVER = localhost"
Conn.Open (strconn)
End Sub

donde lo que te puse "ef" es el nombre que yo le doy a la base de datos

luego uso algo así en el código del programa

Código: [Seleccionar]
Call Conectar
Set RecFactura = Conn.Execute("select * from facturas where factura= " & nfactura)

bla bla bla

Set RecFactura = Nothing


yo uso Visual basic 6.0 espero que esto te sirva...

creo que tienes que cargar las extensiones o complementos adodb primero... ya no lo recuerdo... hace años migre ese programa a UNIX




Por otro lado Feriva  instale la version 2.7...  que es lo unico que me dejo instalar

se abre una consola pero no puedo pegar el codigo que me pasaste,
ya pude pegar  el texto en un shell, guarde el archivo , pero como lo ejecuto?

ya pude ejecutar pero me dice que no encuentra la función isprime .... de donde salieron esas funciones...

Código: [Seleccionar]
NameError: name 'isprime' is not defined
ya pude instalar la version 3.7 pero

mmmm... no se como cargar módulos en particular me interesa el que se llama mpmath, pero no he visto como bajarlo para windows , hay una versión para UNIX


Saludos  \(\mathbb {R}^3\)

12 Enero, 2020, 08:02 am
Respuesta #27

feriva

  • Matemático
  • Mensajes: 9,054
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • No soy matemático, eso es una etiqueta.

Hola Richard.



ya pude instalar la version 3.7 pero

mmmm... no se como cargar módulos en particular me interesa el que se llama mpmath, pero no he visto como bajarlo para windows , hay una versión para UNIX


Tienes que descargarte el módulo sympy para esas funciones que te decía, no viene de serie; el math sí viene, y el mpmath yo lo tengo, me funciona y no recuerdo haberlo instalado.

En Windows no sé decirte cómo se instala, porque uso Linux desde hace años (que trae incorporado el Python directamente) pero habrá muchas páginas por ahí; aquí hay un vídeo tutorial

https://www.youtube.com/watch?v=0OgI5uzWteY

Y aquí puedes descargar el módulo

https://www.sympy.org/es/

Una vez que lo tengas instalado, tienes que importarlo con la orden “from sympy import*” (sin comillas) que ya te importa casi todos los comandos; no todos, por ejemplo, si quieres usar la función para introducir un polinomio interpolador, por poner un caso, tienes que añadir otra líena: from sympy.polys.polyfuncs import interpolate

Cuando lo tengas, aquí tienes algunas funciones que puedes usar con sympy, son especiales para teoría de números:

https://github.com/sympy/sympy/wiki/Number-Theory-in-SymPy

Aquí, otra página donde vienen códigos SymPy para usar ecuaciones con variables, límites, desarrollos de Taylor, expandir polinomios... y cosas así

https://github.com/sympy/sympy/wiki/Quick-examples


Yo tengo las dos versiones de Python, la 2 y la 3; pero no puedo descargar sympy para la 3, por eso uso la 2.7... no sé qué más; que además estoy más acostumbrado, me es más cómoda.
...

Yo también empecé con Basic cuando salió el primer Spectrum; lo tenía un sobrino mío y aprendí un poco jugando con él; luego ya, me compré un Spectrum para mí. Pero de esto hace muchísimo tiempo, no he vuelto a hacer nada en Basic.

Saludos.

13 Enero, 2020, 02:58 am
Respuesta #28

Richard R Richard

  • Ingeniero Industrial
  • Aprendiz
  • Mensajes: 419
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Oh Oh!!! me contestó... y ahora qué le digo...
Hola la verdad es que la función isprime no la pude bajar como modulo

pero anduve buscando y me copie una, hice mi propio modulo, y también el módulo de nextxprime
hice mi probador de la conjetura de Goldbach en Python en un solo día .. un lujo,

Código: [Seleccionar]
#Goldbach
import isprime
import nextprime
N=int(input("comenzar desde el numero ---"))
No=N
p=3
while p < N/2:
        if isprime.is_prime(N - p):
                N = N + 2
                p = 3
        else:
                p=nextprime.next_prime(p+2)
        if N-No>10000000:
                print(N)
                b=input("continua S/N?")
                if b=="S" or b=="s":
                        No=N
                else:
                        goto
print("Numero de goldbach=",N)

los primero 6M de N por debajo de 12 M los probe en 20 min

 el codigo de isprime

Código: [Seleccionar]
def is_prime(num):
    if num < 2:
        return False
    elif num == 2:
        return True
    elif not num % 2:
        return False

    for i in range(3, round(num**0.5)+1, 2):
        if not num % i:
            return False
    return True

y el de nextprime

Código: [Seleccionar]
import isprime
def next_prime(num):   
    while not(isprime.is_prime(num)):
        num = num + 1
    return num

Ahora toca leerme de vuelta tus aportes, y mejorar el código para hacerlo mas veloz.
Saludos  \(\mathbb {R}^3\)

13 Enero, 2020, 12:26 pm
Respuesta #29

feriva

  • Matemático
  • Mensajes: 9,054
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • No soy matemático, eso es una etiqueta.

Qué rápido aprendes, Richard, cómo se nota que eres de carrera científica. Yo, en cambio, como me equivoco tanto, hasta que aprendo, tardo bastante; menos mal que soy cabezota y a base de insistir...

Y qué pena que no puedas instalar SymPy; a ver si apareciera por aquí Víctor Luis, que él se lo instaló en Windows y sabrá qué hay que hacer. De todas formas, que yo sepa, por aquí hay personas que manejan el Python muy bien (mucho mejor que yo) como Geómetracat o Ingmarov, por ejemplo; lo que no sé es si lo hacen en Windows; si eso, ellos te podrían decir cómo instalar los módulos que quieras.

No obstante, mira a ver con esta página, explica específicamente cómo instalar módulos de Python en Windows:

https://es.m.wikihow.com/instalar-paquetes-de-Python-en-Windows-7

...

Por otro lado, el método por tentativa para comprobar primos es bastante lento, incluso aunque uses la raíz cuadrada para eliminar divisores. Se puede usar el test de primalidad de Miller-Rabin, que si lo buscas por ahí vienen códigos para Python; es muy similar al método de Fermat con el pequeño teorema, pero más determinista.
...

Prueba este código que he hecho si quieres a ver cómo te va de velocidad; es más o menos el típico de la criba de Eratóstenes en Python y no necesita ningún módulo (uso el módulo de tiempo, que es de serie, y sólo para que se vea, no hace falta, claro).

Código: [Seleccionar]

import time # Modulo de tiempo

tiempoi=time.time() # Defino variable de tiempo inicial

def  f(n): # Funcion Criba de Eratostenes


nopri = set()           # Defino el conjunto de los compuestos
  for j in range(2, n+1):    # Bucle desde 2 hasta el n que se quiere comprobar
    if j not in nopri: # Si j no se halla en el conjunto de compuestos
      nopri.update(range(j*j, n+1, j))  # introduce en nopri desde j cuadrado los multiplos de j hasta n

# Acaba el bucle llegando hasta n

if n in nopri:    # Si n pertenece al conjunto de los compuestos...                           
return False
else:               
return True

print f(12000000) # Pruebo para el n 12 millones y se determina que no es primo

tiempof=time.time() # Defino variable de tiempo final

print tiempof - tiempoi # Imprime la variacion de tiempo (tiempo de ejecucion; que en mi ordenador tarda sobre 8 segundos).

(Normalmente, para mí, lo haría sin variables boleanas, pero la mayoría de la gente las usa mucho en las funciones y quizá así lo ve más claro todo el mundo).

No obstante, en comparación con lo que tarda isprime del SymPy, sigue siendo muy lento.

Saludos.