Autor Tema: Generación de Números Primos

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

22 Marzo, 2025, 08:11 am
Leído 1234 veces

danizafa

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 284
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
    • Artículos:
Hola  ;D

Cómo están?

Quería mostrar algo.

Por el momento lo estoy trabajando para intentar formalizarlo matemáticamente. Pero he desarrollado en código un programa que es capaz de darme todos los primos hasta n, y al contarlos me dice cuantos números primos hay hasta dicho número.

Trabaja como una especie de criba con un conjunto notablemente reducido de números. Originalmente lo hice con excel, y ahi fui probando. Entonces ya cuando quise probar mas cantidad de números directamente hizo algo para no hacerlo manual.

Esto es lo que salió:




Spoiler

[cerrar]
Spoiler

[cerrar]
Tengo una demostración de la Hipotesis de Riemann, pero es demasiado grande para caber en este margen.

26 Marzo, 2025, 11:34 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Cómo están?

Quería mostrar algo.

Por el momento lo estoy trabajando para intentar formalizarlo matemáticamente. Pero he desarrollado en código un programa que es capaz de darme todos los primos hasta n, y al contarlos me dice cuantos números primos hay hasta dicho número.

Trabaja como una especie de criba con un conjunto notablemente reducido de números. Originalmente lo hice con excel, y ahi fui probando. Entonces ya cuando quise probar mas cantidad de números directamente hizo algo para no hacerlo manual.

Pues hay montones de algoritmos que hacen eso mismo, calcular primos hasta un primo dado y contar cuantos ahí. Así que, en fin, está muy bien que tu hayas programado uno. Pero más allá de eso no se que decirte.

Saludos.

27 Marzo, 2025, 03:38 am
Respuesta #2

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Quería mostrar algo.

Aquí te muestro el código Python de una criba, que devuelve un archivo con los primos hasta el número n que quieras, con el archivo puedes contarlos o hacer el cálculo que quieras.


codigo
Código: [Seleccionar]
import matplotlib.pyplot as plt
from math import acos, sin, cos, sqrt, log, cosh,sinh,tanh,asinh,acosh,atanh
import numpy as np
import math as m
primos=[]
''' si el archivo primos.txt no existe en la misma carpeta que este programa,
 crearlo  con block de notas y poner el 1 en primera línea dar enter y grabar'''
with open("primos.txt") as p:
    primos=p.readlines()
n=int(primos[len(primos)-1])
print(n)
while n < 5000000000:
   n=n+2
   t=0
   bandera=0
   while int(primos[t]) < int(pow(n,0.5)+1):
      divisor=int(primos[t])
      if n % divisor == 0:
         bandera=1
         break
      t+=1
   if bandera==0:
      primos.append(n)
      f=open("primos.txt","a")
      texto=str(n)+"\n"
      f.write(texto)
      print(n)
      f.close()
[cerrar]
Saludos
Saludos  \(\mathbb {R}^3\)

27 Marzo, 2025, 10:40 am
Respuesta #3

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 12,032
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola  ;D

Cómo están?

Quería mostrar algo.

Por el momento lo estoy trabajando para intentar formalizarlo matemáticamente. Pero he desarrollado en código un programa que es capaz de darme todos los primos hasta n, y al contarlos me dice cuantos números primos hay hasta dicho número.

Trabaja como una especie de criba con un conjunto notablemente reducido de números. Originalmente lo hice con excel, y ahi fui probando. Entonces ya cuando quise probar mas cantidad de números directamente hizo algo para no hacerlo manual.

Esto es lo que salió:




Spoiler

[cerrar]
Spoiler

[cerrar]

Con Python tienes también este código que es muy cortito y muy rápido, es la criba de Eratóstenes

Código: [Seleccionar]
n =set()
for p in range (2, 1000+1):
    if p not in n:
        print (p)
        n.update(range (p*p, 1000+1, p))

Sólo eso.
Te lo explico:

Se define el conjunto de los números naturales con este comando n=set()

Este conjunto todavía no está formado, empieza siendo vacío y se irá rellenando según corre el programa.

Python tiene el comando “set”, el cual, a diferencia de las listas o matrices y demás, no repite números o elementos; es decir, si introducimos un número que ya está dentro, no lo mete y no aumenta la cantidad de elementos. Es tal como un conjunto matemático, los elementos son únicos, no existen repeticiones.

Después, se define hasta qué número va a alcanzar el conjunto empezando desde de 2 en adelante; y se define con este otro comando: for p in range (2, 1000+1)

En este caso he puesto hasta 1000, como podría haber puesto hasta un número mas grande, y nos dará al final todos los primos menores que 1000.

A la vez, con esa instrucción se está definiendo la variable “p”, en la que van entrando los números “n” en principio, pero después sólo se imprimirán los primos, como se va a ver en las siguientes instrucciones.

Mientras el bucle va corriendo, la instrucción siguiente analiza qué números van entrando con el “si” condicional que aparece en ella: if p not in n

y que dice 'si “j” no está en “n”'

Como al inicio todavía no hay ningún número metido en el conjunto, el primero que mete (que debería meter, pero no mete) es el 2, que no estaba en “n” porque era un conjunto vacío, así que cumple la condición de no estar en “n”.

Con la instrucción siguiente print (p) lo imprime en pantalla, apareciendo el 2.

La siguiente instrucción, n.update(range (p*p, 1000+1, p)) mete en el conjunto el valor \( p\cdot p \), que en este caso es \( 2\cdot 2=4 \), con lo cual, al ser producto de dos números ya no puede ser primo, sea 2 ó 3 ó el que sea.

Esto hace que vaya incluyendo sólo números compuestos, con lo que solamente los primos cumplirán la condición de la instrucción “if p not in n”, de forma que sólo se listarán los primos.

Vemos que en el bucle pasa eso (lo de meter los números al cuadrado) hasta 1000, y después aparece una “p” detrás; esto quiere decir que los números entran en el bucle de “p” en “p”, es decir, cuando p=2 van entrando sólo los pares, no todos los números; cuando p=3 los mete de tres en tres 9, 12, 15... No importa que no meta el 6, porque es par y ya lo metió antes (de hecho, como dije arriba, ya metió todos los pares y en el conjunto no se repiten números, así que realidad va metiendo 9, 15... los múltiplos de 3 no pares)

Y así sucesivamente.

Saludos.


31 Marzo, 2025, 03:15 am
Respuesta #4

danizafa

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 284
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
    • Artículos:
Tengo una manera de calcularlos, al estilo de Criba de Eratóstenes. Pero mucho más óptimo.

Incluso puedo hacer el cálculo "manual" de cuántos primos hay hasta determinado número. No utilizo la criba de eratóstenes.

Tenía ganas de compartirlo, pero quiero armarlo mejor. Es bastante sencillo contar los primos. Mi código no filtra números en gran cantidad, si realiza un filtro, pero de números específicos.

Gracias por los comentarios! Entiendo que solo he mostrado una lista de números que nada más dice. Por eso es que no espero comentarios "positivos" les llamemos.

Cuando lo armé, tenía una idea más o menos de lo que quería, y lo pude programar de manera computarizada. Pero no podía escribirlo como una formula o como un método que pueda usarse manualmente. Ahora hice eso, pero por el momento prefiero trabajarlo un poco más para poder usarlo en números un poco más grandes de lo que he probado. Lo use con 10.000 recién. Y no requiere super cálculos, pero a medida que los números crecen todavía me enriedo con algunas cosas.

Saludos!

Tengo una demostración de la Hipotesis de Riemann, pero es demasiado grande para caber en este margen.