Dado que has implementado el algoritmo MPQS, intentaré responder de forma concisa a cada uno de los puntos "¿Qué es...?". Algunos de ellos son efectivamente "signos matemáticos", pero otros son más bien nombres de variables, etc.
Cuando el tiempo lo permita, espero volver a relacionar mis respuestas con las motivaciones operativas, es decir, cómo SIQS revisa el paso de inicialización de MPQS.
- ¿Qué es? tmemp ?
- ¿Qué es el " × "signo"
- ¿Qué es el signo "/"?
Esta notación aparece en la citada "Figura 2.3: resumen de las etapas de inicialización de siqs" en la página 14 de la tesis de máster de Contini. Es la primera declaración dentro de un bucle en ℓ=1 to s :
Calcula γ=tmemp×(a/qℓ)−1modqℓ .
Una declaración más clara se encuentra en el Prime Wiki para el tamiz cuadrático autoinicializado en la sección "Generación del primer polinomio".
El primer término tmemp es una matriz previamente rellenada con entradas para cada primo p en la base del factor. Volviendo a la "Figura 2.2: resumen del algoritmo mpqs" (en la página 13), encontramos allí (bajo Calcular los datos de puesta en marcha ) que para cada primo p almacenamos una raíz cuadrada modular de Nmodp es decir, una solución t de:
t2≡Nmodp
donde N es el entero compuesto (no una potencia pura) que hay que factorizar. Nótese que en este esquema de cribado sólo nos interesará una base factorial cuyos primos p tienen N como un residuo cuadrático. Las entradas de la configuración tmemp son "realizaciones" de esa propiedad.
Pero la notación es, en el mejor de los casos, confusa y podría decirse que se trata de una pequeña errata. La expresión del array tmemp necesita un índice (o desplazamiento) para denotar que raíz cuadrada modular de N se pretende. Desde el hecho de que "computamos" modqℓ podemos deducir que el tmemp entrada para prime qℓ es necesario en esta expresión.
A continuación el cartel " × " es sólo la multiplicación, aquí la multiplicación modular modqℓ .
También el signo "/" puede entenderse como una división entera ordinaria, teniendo en cuenta la advertencia: aquí a es el producto sobre algunos primos que incluyen qℓ . Así que la división de enteros es exacta, y el cociente (a/qℓ) podría ser también proporcionada multiplicando juntos todos esos primos excepto omitiendo el particular qℓ designado por el índice del bucle ℓ (pasando de 1 a s (sea cual sea el paso del bucle en el que nos encontremos).
- ¿Qué es la "ainv"?
En realidad se trata de una matriz ainvp en el siguiente bloque del algoritmo. Para cada factor base primo p que no dividir a (es decir, aquellos primos de base factorial que fueron no multiplicado para obtener a ), calculamos la inversa multiplicativa de amodp :
Calcula ainvp=a−1modp
El cálculo de la inversa multiplicativa de a con respecto al módulo coprimo p es un algoritmo de división conocido ejercicio.
- ¿Qué es el signo "#"?
Cuando esto aparece en la siguiente sección Etapa de inicialización para el siguiente 2s−1−1 polinomios El símbolo de la libra es simplemente una abreviatura de "numerado". Es decir, esa frase parentética inicial debe entenderse como que dice:
(Supongamos que acabamos de tamizar el polinomio numerado i , por lo que estamos inicializando el polinomio numerado (i+1) , 1≤i≤2s−1−1 )
En otras palabras, se trata más bien de una abreviatura para pasar a la siguiente numerado polinomio en lugar de una notación matemática de algún tipo. La "numeración" subyacente de los polinomios está relacionada matemáticamente con un código Gray, para el que véase el Apéndice C del artículo de Contini.
- ¿Qué es el " || ¿"Signo"?
Esta es quizás la menos estándar de las notaciones empleadas aquí. Aparece como:
Dejemos que ν sea el número entero que satisface 2ν||2i .
En otras palabras, esto significa ν es la mayor potencia de 2 que divide 2i .
- ¿Qué es? soln1p ?
Esta notación soln1p es un nombre de variable para una matriz de valores, una entrada por cada factor base primo p que no dividir a . Sus valores se definen (como también soln2p voluntad) para el primer polinomio y posteriormente actualizado en serie para el siguientes polinomios .