4 votos

Fórmulas para identificar o generar primos; Se distribuye arreglos distribuidos. Resuelto Básicamente división de prueba.

Mirando los números y teniendo en cuenta $n < p < 2n - 2$ $p = 3n\pm 1$ donde $p$ es cualquier número primo, yo era capaz de identificar una propiedad de los números de $c=3n\pm 1$ donde $c$ es un número compuesto:

Deje $P_n$ ser primos donde $P_1 = 3, P_2 = 5,...,P_n=p$.

Cada compuesto $c$ $n \to x$ es de la forma:

  • $P_{1 \to n}y$

o

  • ${P_n }^2$

Puesto que esto es cierto, sólo $n$ primos de $P_n = \pi(\sqrt{limit})-1$ donde $\pi(x)$ es la principal función de conteo, es necesario identificar todos los números primos $P_n < p < limit$. En ese caso, el número de números primos se utiliza para determinar si $n=p$ son considerablemente menores que en otras funciones que las pruebas de los números primos, y es un poco más elegante, no de fuerza bruta, no aleatoriedad, por ejemplo,

Así que es posible que la búsqueda de números primos de $3,...,\infty$ se podría hacer (si no tiende hacia el infinito, juego de palabras) por la prueba de los números impares de forma consecutiva y el aumento de la $n$ por cada $c = {P_n}^2$.

Para probar esto, necesitaba una función para comprobar si el número es de la forma $3n\pm 1$:

$e_n(x)=\left\{\begin{matrix} 0, & x\pm 1 \not\equiv 0 \: \mod\,3\\ 1, & \end{de la matriz}\right.$

Then I needed to check if the number is composite based on $P_{1 \n}y$:

$k_n(x)=\left\{\begin{matrix} 0, & x \equiv 0 \: \mod\,\forall\in \{ P_1,...,P_{n-1} \}\\ 1, & \end{de la matriz}\right.$

I also needed to check if ${P_n }^2$ where $n = \pi(\sqrt{límite})-1$:

$t_n(x) = \left\{\begin{matrix} 0, & x = \,({P_n}^2)\\ 1, & \end{de la matriz}\right.$

Then I summed it all into one function:

isPrime$_n(x) = t_n(x) \mediados de k_n(x) \mediados de e_n(x),\,\,$ if $\,\, {\pi(\sqrt x)} = n$

Where $\mid$ es el operador lógico and.

De esta manera es fácil crear un algoritmo que los rendimientos de los números primos, y sólo los números primos, sin tamizado o la realización de cálculos complejos.

Ejemplo de pseudo-código:

n = 1: Counts number of primes in use by algorithm
N = {3,5,7,9,...,limit}: All natural odd numbers from 3 to limit
P = {3}: The first odd prime number, the others found are appended

for all numbers x in set N do:
    if not t(x,n):
        n = n + 1, next
    if not k(x,n):
        next;
    if e(x,n):
        Append x to P, next

Este rendimientos de los números primos y sólo los números primos.

He aquí un ejemplo que utiliza Python para generar números primos se basan en este principio: (Por favor excusa de formato incorrecto.)

def k(x,n):
    for y in range(n):
        if x%primes[y]==0:
            return False
    return True

def e(x,n):
    global primes
    def xpm(x):
        return x+1,x-1
    x = xpm(x)
    if not (x[0]%3==0 or x[1]%3==0):
            return False
    return True

def t(x,n):
    global primes
    if x!=(primes[n-1]**2):
        return True
    return False

## The number of primes used, n, is printed as n but;
## if the limit has a prime power close or at the limit,
## like 55, then n is most likely incorrect because
## the next number that is 0 MOD(primes[n-1]) is primes[n-1]*primes[n-2]

primes = [3]    ## Start with the first odd prime
n = 1           ## n is 1, since primes[n-1] == 3
                ## primes[n-1] is 2
limit  = 1000   ## The limit of numbers to test if prime

for x in range (5,limit + 1,2):  ## For all odd numbers x to limit

    if not t(x,n):          ## if x % primes[n-1] == 0, then x is composite.
        n += 1              ## Increment n, because primes[n-1]**2 was
        continue            ## encountered, then continue

    if not k(x,n):          ## if x % primes[0 -> n-1] == 0, then
        continue            ## x is composite, continue

    if not e(x,n):          ## if (x+-1) % 3 == 0, then 
        continue            ## x is composite

    primes.append(x)        ## x is prime so append it to the prime list

print ("Number of primes used to generate "+str(len(primes))+": "+str(n-1))
print ("Largest prime used: "+str(primes[n-1]))

Los rendimientos de los primos de cualquier límite, pero el código no está optimizado, así que no espere tamiz de la velocidad, puesto que es en realidad la prueba de cada número, no sieveing ellos.

Aunque lenta en comparación con la buena tamices, se corrió y terminó en menos de 3 segundos con $limit = 10^6$. Esto resultó en 78497 de los números primos, generados a partir de $P_1,...,P_n$ donde $n = 167 = \pi(\sqrt{limit})-1$, que es el número de números primos menores de $10^6$-1, que representan el 2.

Así que mi pregunta es:

Es bien conocido y entendido desde antes? En ese caso, ¿dónde podría encontrar más información sobre el tema?

Lo pregunto porque después de semanas de investigación, no he encontrado una función, a excepción de los tamices, que no es exactamente de verificación de números de primalidad, que no necesita más de $\pi(\sqrt x)$ prepara para generar una serie de números primos.

Si me he perdido un punto importante que hace que este conocimiento común, por favor, dime lo que puede que se me cayó la picadura de trabajar para nada, en lugar de leer...

Un cordial saludo,

Juan

3voto

Adam Kahtava Puntos 383

Has re-descubierto la división de prueba.

0voto

marty cohen Puntos 33863

Ha dado el primer paso para encontrar la fórmula de conteo principal de Meissel.

Eche un vistazo a esto: http://en.wikipedia.org/wiki/Prime-counting_function

0voto

Sharkos Puntos 11597

Este es el estándar de la forma más simple de la prueba de primalidad el uso de una lista de números primos. Yo sospecho que no tienen un nombre, ya que es simplemente la única cosa que hacer. La lógica es la siguiente; creo que haya demasiado complicado como tratar a un montón de casos por separado.

  • Si un número $n$ no es primo, tiene al menos dos factores primos $p,q$. Desde $pq\le n$ al menos uno de ellos debe ser $\le \sqrt n$ o se multiplican a algo más grande que $n$.
    • Por lo tanto, una prueba de primalidad de trabajo sólo por comprobar la divisibilidad por posibles factores debe comprobar todos los números primos dentro de $2, \cdots, \sqrt n$

Para un ejemplo del algoritmo de discutir, ver el final del primer párrafo del artículo de la Wikipedia http://en.m.wikipedia.org/wiki/Trial_division

0voto

syneticon-dj Puntos 170

¿Podrías modificar tu código para darle a tu función un punto de partida modificable?

Lo que quiero decir con eso es que actualmente, en su código, N comienza en 3 y sube 5, 7, 9 ... etc, y P también comienza en 3.

¿Podría modificarse para que N comience en, digamos, 1000001 (primer número impar después de 1mil), y P comience en 1000003 (primer primo después de 1mil)?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X