Para encontrar si N es un número primo, solo tenemos que buscar todos los números menores o iguales a sqrt (N). ¿Porqué es eso? Estoy escribiendo un código C para tratar de entender una razón detrás de él.Encuentra un número primo?
Respuesta
N es primo si es un número entero positivo que es divisible por exactamente dos números enteros positivos, 1 y N. Dado que los divisores de un número no puede ser mayor que el número, esto da lugar a una sencilla prueba de primalidad:
- Si un entero N, mayor que 1, no es divisible por ningún entero en el rango
[2, N-1]
, entonces N es primo. De lo contrario, N no es primo.
Sin embargo, sería bueno modificar esta prueba para hacerlo más rápido. Entonces, investiguemos.
Tenga en cuenta que los divisores de N aparecen en pares. Si N es divisible por un número M, entonces también es divisible por N/M. Por ejemplo, 12 es divisible por 6, y también por 2. Además, si es M >= sqrt(N)
, entonces N/M <= sqrt(N)
.
Esto significa que si ningún número inferior o igual a sqrt (N) divide N, ningún número mayor que sqrt (N) divide N tampoco (excepto 1 y N ellos mismos), de lo contrario surgiría una contradicción.
Así que tenemos una mejor prueba:
- Si un entero N, mayor que 1, no es divisible por cualquier número entero en el rango
[2, sqrt(N)]
, entonces N es primo. De lo contrario, N no es primo.
si considera el razonamiento anterior, debería ver que un número que pasa esta prueba también pasa la primera prueba, y un número que falla esta prueba también falla la primera prueba. Las pruebas son por lo tanto equivalentes.
por favor muestra que no tenemos ni idea ... – vehomzzz
Un número compuesto (uno que no es primo, o 1) tiene al menos 1 par de factores, y se garantiza que uno de los números de cada par es menor o igual que la raíz cuadrada del número (que es sobre lo que preguntas).
Si hace coincidir la raíz cuadrada del número, obtiene el número en sí (sqrt(n) * sqrt(n) = n
), por lo que si hizo uno de los números más grandes (que sqrt(n)
) tendría que hacer el otro más pequeño. Si solo revisa los números 2 a sqrt(n)
, habrá verificado todos los factores posibles, ya que cada uno de esos factores se vinculará con un número que es mayor que sqrt(n)
(excepto, por supuesto, si el número es de hecho un cuadrado de algún otro número, como 4, 9, 16, etc. ... pero eso no importa ya que usted sabe que no son primos, sino que son fácilmente factorizados por el propio sqrt(n)
).
Porque en el peor de los casos, el número n
se puede expresar como .
Si el número se puede expresar de manera diferente, que los hombres que uno de los divisores será menor que a = sqrt(n)
, pero el otro puede ser mayor.
La razón es simple, cualquier número mayor que el sqrt hará que el otro multiplicador sea más pequeño que el sqrt. En tal caso, ya deberías haberlo comprobado.
Vamos n = un × b ser compuesto.
Supongamos un> sqrt (n) y b> sqrt (n).
un × b> sqrt (n) x sqrt (n)
un × b>n
Pero sabemos un × b = n, por lo tanto un < sqrt (n) o b < sqrt (n).
Dado que sólo necesita saber un o b para mostrar n es compuesto, sólo tiene que comprobar los números hasta sqrt (n ) para buscar un número tal.
- 1. Ruby: determine si un número es un número primo
- 2. Encontrar un número primo después de un número dado
- 3. C++ tarea número primo del libro
- 4. ¿Cuál es la función integrada que encuentra el número primo siguiente más grande en Java?
- 5. Un mejor tamiz de número primo concurrente en go
- 6. ¿Cómo puedo encontrar el número primo más cercano?
- 7. Generar número primo grande con los últimos dígitos especificados
- 8. La determinación de si un número dado es primo en Haskell
- 9. Comprobar de forma determinista si un número grande es primo o compuesto.
- 10. determinar rápidamente si un número es primo en Python para los números <1 mil millones
- 11. ¿Cómo podemos calcular N elegir K módulo un número primo sin desbordamiento?
- 12. Encuentra el resto de la división de un número
- 13. Algoritmo para encontrar el número primo más grande más pequeño que x
- 14. Desbordamiento de pila al calcular el número primo 10,001 en Java
- 15. Encuentra el número más pequeño no utilizado en SQL Server
- 16. Encuentra cuatro números consecutivos que suman el número dado
- 17. Encuentra el número N-ésimo más frecuente en la matriz
- 18. ¿Cómo se encuentra el factorial de un número en un script Bash?
- 19. Encuentra el número más pequeño en Arreglo rotativo ordenado
- 20. Encuentra el número más cercano en una lista de números
- 21. Encuentra un puerto libre
- 22. Averiguar en qué número de línea se encuentra un elemento en dom en Javascript?
- 23. encuentra la diferencia de tiempo en segundos como un número entero con python
- 24. Encuentra el número de ángulos internos de un polígono, más grande que 180º
- 25. ¿Alguien me puede enseñar cómo optimizar aún más esta secuencia de comandos 'imprima hasta el enésimo número primo'?
- 26. ¿Monótate es el buen primo del malvado Singleton?
- 27. ¿Existe una biblioteca para funciones relacionadas con primo para Python?
- 28. ¿Hay algún algoritmo simple que pueda determinar si X es primo y no confundir a un simple programador mortal?
- 29. Encuentra un elemento en una lista de tuplas
- 30. Encuentra el índice de un char en una cadena?
No relacionado con la programación – ChssPly76
@ ChssPly76: Creo que esta es una consulta de algoritmos completamente válida. – Artelius
Hmm ... Estoy escribiendo código para implementar esto. ¿Cómo no está programando de nuevo? – vehomzzz