Para probar si un número es primo o no, ¿por qué tenemos que probar si es divisible solo hasta la raíz cuadrada de ese número?
393
Para probar si un número es primo o no, ¿por qué tenemos que probar si es divisible solo hasta la raíz cuadrada de ese número?
n = a*b
ya <= b
entoncesa*a <= a*b = n
.floor(sqrt(n))
.Respuestas:
Si un número
n
no es primo, se puede factorizar en dos factoresa
yb
:Ahora
a
yb
no puede ser mayor que la raíz cuadrada den
, ya que el productoa * b
sería mayor quesqrt(n) * sqrt(n) = n
. Entonces, en cualquier factorización den
, al menos uno de los factores debe ser más pequeño que la raíz cuadrada den
, y si no podemos encontrar ningún factor menor o igual a la raíz cuadrada,n
debe ser primo.fuente
sqrt(n)
tiene que ser lo suficientemente preciso para que esta propiedad se mantenga dado que estamos usando puntos flotantes?i * i <= n
lugar dei <= sqrt(n)
si desea evitar las complejidades de los números de punto flotante.Digamos
m = sqrt(n)
entoncesm × m = n
. Ahora, sin
no es primo, entoncesn
se puede escribir comon = a × b
, entoncesm × m = a × b
. Tenga en cuenta quem
es un número realn
, mientras que ,a
yb
son números naturales.Ahora puede haber 3 casos:
En los 3 casos,
min(a, b) ≤ m
. Por lo tanto, si buscamos hastam
, estamos obligados a encontrar al menos un factor den
, que es suficiente para mostrar quen
no es primo.fuente
n is not a prime
, y pruébelo, de lo contrario es primordial.Porque si un factor es mayor que la raíz cuadrada de n, el otro factor que se multiplicaría con él para igualar n es necesariamente menor que la raíz cuadrada de n.
fuente
Una explicación más intuitiva sería: -
La raíz cuadrada de 100 es 10. Digamos axb = 100, para varios pares de ay b.
Si a == b, entonces son iguales y son la raíz cuadrada de 100, exactamente. Que es 10.
Si uno de ellos es menor que 10, el otro tiene que ser mayor. Por ejemplo, 5 x 20 == 100. Uno es mayor que 10, el otro es menor que 10.
Pensando en axb, si uno de ellos cae, el otro debe hacerse más grande para compensar, por lo que el producto permanece en 100. Giran alrededor de la raíz cuadrada.
La raíz cuadrada de 101 es aproximadamente 10.049875621. Entonces, si está probando el número 101 para primalidad, solo necesita probar los números enteros hasta el 10, incluido 10. Pero 8, 9 y 10 no son primos, por lo que solo tiene que probar hasta el 7, que es principal.
Porque si hay un par de factores con uno de los números mayores que 10, el otro tiene que ser menor que 10. Si el menor no existe, no hay un factor mayor de 101.
Si está probando 121, la raíz cuadrada es 11. Debe probar los enteros primos del 1 al 11 (inclusive) para ver si entra de manera uniforme. 11 entra 11 veces, entonces 121 no es primo. Si te hubieras detenido a las 10 y no hubieras probado 11, te habrías perdido 11.
Debe probar cada número entero primo mayor que 2, pero menor o igual que la raíz cuadrada, suponiendo que solo esté probando números impares.
``
fuente
Supongamos
n
que no es un número primo (mayor que 1). Entonces hay númerosa
yb
tal queAl multiplicar la relación
a<=b
pora
yb
obtenemos:Por lo tanto: (tenga en cuenta que
n=ab
)Por lo tanto: (Tenga en cuenta que
a
yb
son positivos)Entonces, si un número (mayor que 1) no es primo y probamos la divisibilidad hasta la raíz cuadrada del número, encontraremos uno de los factores.
fuente
Supongamos que el entero dado
N
no es primo,Entonces N puede factorizarse en dos factores
a
yb
, de2 <= a, b < N
tal manera queN = a*b
. Claramente, ambos no pueden ser mayores quesqrt(N)
simultáneamente.Supongamos sin pérdida de generalidad que
a
es menor.Ahora, si no puede encontrar ningún divisor de
N
pertenencia en el rango[2, sqrt(N)]
, ¿qué significa eso?Esto significa que
N
no tiene ningún divisor en[2, a]
asa <= sqrt(N)
.Por lo tanto,
a = 1
y por lob = n
tanto, por definición,N
es primo ....
Lectura adicional si no está satisfecho:
Muchas combinaciones diferentes de
(a, b)
pueden ser posibles. Digamos que son:(a 1 , b 1 ), (a 2 , b 2 ), (a 3 , b 3 ), ....., (a k , b k ). Sin pérdida de generalidad, asumir una i <b i ,
1<= i <=k
.Ahora, para poder demostrar que
N
no es primo, es suficiente demostrar que nada de un i puede factorizarse más. Y también sabemos que a i <=sqrt(N)
y, por lo tanto, debe verificar hastasqrt(N)
que cubra todo a i . Y, por lo tanto, podrá concluir siN
es primo o no ....
fuente
En realidad, se trata de usos básicos de factorización y raíces cuadradas.
Puede parecer abstracto, pero en realidad simplemente radica en el hecho de que el factorial máximo posible de un número no primo tendría que ser su raíz cuadrada porque:
sqrroot(n) * sqrroot(n) = n
.Dado que, si algún número entero arriba
1
y abajo o arriba sesqrroot(n)
divide en partes igualesn
, entoncesn
no puede ser un número primo.Ejemplo de pseudocódigo:
fuente
guard
declaración en Swift junto con esta práctica stackoverflow.com/a/25555762/4475605 para hacer una salida anticipada de un cálculo en lugar de desperdiciar energía computacional. Gracias por tu publicación.++i
convertirse en el número 1, que siempre devolvería falso (porque 1 se divide en todo). He corregido la respuesta anterior.Entonces, para verificar si un número N es primo o no. Solo necesitamos verificar si N es divisible por números <= SQROOT (N). Esto se debe a que si factorizamos N en 2 factores, digamos X e Y, es decir. N = X Y. Cada uno de X e Y no puede ser menor que SQROOT (N) porque entonces, X Y <N Cada uno de X e Y no puede ser mayor que SQROOT (N) porque entonces, X * Y> N
Por lo tanto, un factor debe ser menor o igual a SQROOT (N) (mientras que el otro factor es mayor o igual a SQROOT (N)). Entonces, para verificar si N es Prime solo necesitamos verificar esos números <= SQROOT (N).
fuente
Digamos que tenemos un número "a", que no es primo [no significa número primo / compuesto - un número que puede dividirse equitativamente por números distintos de 1 o en sí mismo. Por ejemplo, 6 puede dividirse en partes iguales entre 2, o entre 3, así como entre 1 o 6].
6 = 1 × 6 o 6 = 2 × 3
Entonces, si "a" no es primo, entonces se puede dividir por otros dos números y digamos que esos números son "b" y "c". Lo que significa
a = b * c.
Ahora, si "b" o "c", cualquiera de ellos es mayor que la raíz cuadrada de "a" que la multiplicación de "b" y "c" será mayor que "a".
Entonces, "b" o "c" siempre es <= raíz cuadrada de "a" para probar la ecuación "a = b * c".
Debido a la razón anterior, cuando probamos si un número es primo o no, solo verificamos hasta la raíz cuadrada de ese número.
fuente
Dado cualquier número
n
, entonces una forma de encontrar sus factores es obtener su raíz cuadradap
:Por supuesto, si multiplicamos
p
por sí mismos, entonces volvemosn
:Se puede reescribir como:
Donde
p = a = b
. Sia
aumenta, entoncesb
disminuye para mantenera*b = n
. Por lo tanto,p
es el límite superior.Actualización: Hoy vuelvo a leer esta respuesta y me quedó más claro. El valor
p
no significa necesariamente un número entero porque si lo es, entoncesn
no sería un primo. Entonces,p
podría ser un número real (es decir, con fracciones). Y en lugar de pasar por todo el rango den
, ahora solo tenemos que pasar por todo el rango dep
. La otrap
es una copia espejo, por lo que en efecto reducimos a la mitad el rango. Y luego, ahora veo que podemos continuar rehaciendosquare root
y haciéndolop
hasta la mitad del rango.fuente
Sea n no primo. Por lo tanto, tiene al menos dos factores enteros mayores que 1. Sea f el menor de estos factores. Supongamos que f> sqrt n. Entonces n / f es un entero LTE sqrt n, por lo tanto más pequeño que f. Por lo tanto, f no puede ser el factor más pequeño de n. Reducción al absurdo; El factor más pequeño de n debe ser LTE sqrt n.
fuente
Cualquier número compuesto es un producto de primos.
Digamos
n = p1 * p2
, dondep2 > p1
y son primos.Si
n % p1 === 0
entonces n es un número compuesto.Si
n % p2 === 0
entonces adivina quén % p1 === 0
también!Así que no hay forma de que si,
n % p2 === 0
peron % p1 !== 0
al mismo tiempo. En otras palabras, si un número compuesto n puede dividirse equitativamente entre p2, p3 ... pi (su factor mayor), también debe dividirse por su factor más bajo p1 . Resulta que el factor más bajop1 <= Math.square(n)
siempre es cierto.fuente
Para probar la primalidad de un número, n , uno esperaría un ciclo como el siguiente en primer lugar:
Lo que hace el ciclo anterior es esto: para un determinado 1 <i <n , comprueba si n / i es un entero (deja el resto 0). Si existe una i para la cual n / i es un número entero, entonces podemos estar seguros de que n no es un número primo, momento en el cual termina el ciclo. Si para no i, n / i es un número entero, entonces n es primo.
Como con todos los algoritmos, preguntamos: ¿podemos hacerlo mejor?
Veamos qué está pasando en el bucle anterior.
La secuencia de i va: i = 2, 3, 4, ..., n-1
Y la secuencia de comprobaciones de enteros va: j = n / i, que es n / 2, n / 3, n / 4, ..., n / (n-1)
Si para algunos i = a, n / a es un número entero, entonces n / a = k (número entero)
o n = ak, claramente n> k> 1 (si k = 1, entonces a = n, pero nunca alcanzo n; y si k = n, entonces a = 1, pero comienzo la forma 2)
Además, n / k = a, y como se indicó anteriormente, a es un valor de i entonces n> a> 1.
Entonces, a y k son números enteros entre 1 yn (exclusivo). Como, alcanzo cada número entero en ese rango, en alguna iteración i = a, y en alguna otra iteración i = k. Si la prueba de primalidad de n falla para min (a, k), también fallará para max (a, k). Por lo tanto, debemos verificar solo uno de estos dos casos, a menos que min (a, k) = max (a, k) (donde dos controles se reducen a uno), es decir, a = k, en cuyo punto a * a = n, que implica a = sqrt (n).
En otras palabras, si la prueba de primalidad de n fallara para algunos i> = sqrt (n) (es decir, max (a, k)), entonces también fallaría para algunos i <= n (es decir, min (a , k)). Entonces, sería suficiente si ejecutamos la prueba para i = 2 a sqrt (n).
fuente