Como ejercicio para mí mismo, estoy implementando la prueba Miller-Rabin. (Trabajando a través del SICP). Comprendo el pequeño teorema de Fermat y pude implementarlo con éxito. La parte en la que estoy tropezando en la prueba de Miller-Rabin es este "1 mod n". ¿No es 1 mod n (n es un entero aleatorio) siempre 1? Así que estoy confundido con lo que podría ser una "raíz cuadrada no trivial de 1 módulo n" ya que en mi opinión "1 mod n" siempre es 1 cuando se trata de valores enteros. ¿Qué me estoy perdiendo?Confundido en Miller-Rabin
Respuesta
1 es congruente con 9 mod 8 de modo 3 es una raíz cuadrada no trivial de 1 mod 8.
lo que está trabajando no es números individuales, sino conjuntos de equivalencia. [m]n
es el conjunto de todos los números x
tal que x
es congruente con m
mod n
. Cualquier cosa que sqaure a cualquier elemento de este conjunto es una raíz cuadrada de m
modulo n
.
dado cualquier n
, tenemos el conjunto de enteros módulo n que podemos escribir como Zn
. este es el conjunto (de conjuntos) [1]n
, [2]n
, ..., [n]n
. Cada entero se encuentra en uno y solo uno de esos conjuntos. podemos definir la suma y la multiplicación en este conjunto por [a]n + [b]n = [a + b]n
y lo mismo para la multiplicación. Por lo tanto, una raíz cuadrada de [1]n
es un (elemento n) de [b]n
tal que [b*b]n = [1]n
.
En la práctica, sin embargo, podemos combinar con m
[m]n
y normalmente elegir el elemento único, m'
de [m]n
tal que 0 <= m' < n
como nuestro elemento 'representativa': esto es lo que normalmente consideramos como el m mod n
. pero es importante tener en cuenta que estamos 'abusando de la notación' como dicen los matemáticos.
aquí hay algunos (no-idiomática) código Python como no tengo un cajero automático de esquema intérprete:
>>> def roots_of_unity(n):
... roots = []
... for i in range(n):
... if i**2 % n == 1:
... roots.append(i)
... return roots
...
>>> roots_of_unity(4)
[1, 3]
>>> roots_of_unity(8)
[1, 3, 5, 7]
>>> roots_of_unity(9)
[1, 8]
Así, en particular, (mirando el último ejemplo), 17 es una raíz del módulo de unidad 9. de hecho, 17^2 = 289 y 289% 9 = 1. regresar a nuestra notación anterior [8]9 = [17]9
y ([17]9)^2 = [1]9
Esa es la razón por la redacción es de una raíz cuadrada no trivial de 1. 1 es una raíz cuadrada trivial de 1 , para cualquier módulo n.
17 es una raíz cuadrada no trivial de 1, mod 144. Así 17^2 = 289, que es congruente con 1 mod 144. Si n es primo, entonces 1 y n-1 son las dos raíces cuadradas de 1, y son las únicas dos de esas raíces. Sin embargo, para el compuesto n generalmente hay múltiples raíces cuadradas. Con n = 144, las raíces cuadradas son {1,17,55,71,73,89,127,143}.
creo que el malentendido proviene de la definición del libro da sobre la raíz no trivial:
una “raíz cuadrada no trivial de 1 módulo n”, es decir, un número no es igual a 1 o n - 1 cuyo cuadrado es igual a 1 módulo n
donde creo que debería decir:
cuyo cuadrado es congruente a 1 módulo n
Compartí la misma confusión que el OP, y esta aclaración marcó la diferencia. La respuesta aceptada es excelente, pero esta respuesta aborda la fuente de la confusión. –
- 1. Confundido por "dejar" en Clojure
- 2. Confundido acerca de PixelFormat
- 3. Confundido sobre ThreadLocal
- 4. ¿Confundido sobre global.asax?
- 5. Python: confundido con list.remove
- 6. Confundido sobre Huffman árboles
- 7. Confundido sobre el? operador en C#
- 8. confundido con el? operador en C#
- 9. confundido por el capital que en vim
- 10. confundido por los cierres en JavaScript
- 11. Confundido en cómo funciona una solicitud JSONP
- 12. Confundido en obtener el ManagedObjectContext de AppDelegate
- 13. Confundido sobre while loop en javascript
- 14. Confundido con Model vs ViewModel
- 15. Confundido sobre la dependencia RequireJS
- 16. xmltask confundido acerca de DTD
- 17. Confundido acerca de Frustum Culling
- 18. Confundido entre SqlCommand y SqlDataAdapter
- 19. Confundido con la instrucción CMPSB
- 20. Confundido sobre la asignación de memoria
- 21. Confundido sobre std :: runtime_error contra std :: logic_error
- 22. Maven confundido acerca de JRE sido usado
- 23. Confundido sobre cuándo lanzar una excepción
- 24. Confundido sobre generadores para Entity Framework 4.1
- 25. Confundido acerca de los parámetros de LINQ
- 26. confundido acerca de MFC/.net/WPF
- 27. Confundido sobre el sistema de archivos Node.js
- 28. Confundido sobre este uso de un lambda
- 29. Confundido por pseudo-clase CSS: activo
- 30. Bash bug re $ LINENO-- ¿o estoy confundido?
añadieron la etiqueta [math]. – aaronasterling
Esta pregunta está fuera de tema porque no es una pregunta de programación –