No soy un experto en algoritmos de teoría de números, pero me parece que se puede emplear el Teorema del Resto Chino para obtener una primera puñalada decente en un algoritmo de "cribado".
-
Utilizar varios registros r[p], cada uno de los cuales almacena un residuo módulo p 2 para algún primo p. Definir tal registro para varios primos pequeños p ∈ {2, 3, 5, ... , P} para s , P} para algún primo convenientemente grande P. Los utilizarás para representar un número entero R, tal que R ≡ r[p] (mod p 2 ). No debería necesitar demasiados registros de este tipo para representar fielmente incluso números no negativos razonablemente grandes (los registros pueden determinar de forma única cualquier número entero de 1 a 2 2 × 3 2 × 5 2 × ... × P 2 ).
-
Cada vez que desee incrementar R, incremente también cada uno de los registros r[p]. Si R es libre de cuadrados, ninguno de estos registros será cero módulo del cuadrado del primo apropiado. Para números enteros suficientemente pequeños N, incluso se puede caracterizar N como libre de cuadrados si ninguno de estos residuos es cero. Dicho de otro modo, cuantos más registros r[p] mantenga, mayor será el rango de números libres de cuadrados que podrá detectar automáticamente utilizando estos registros.
Supongamos que quieres comprobar la cuadratura hasta un límite superior N. ¿Qué necesitas para comprobar la cuadratura utilizando únicamente registros como los que he descrito? Lo que necesitas es que cualquier número compuesto menor que N tenga un factor primo de la lista de registros que mantienes; es decir, necesitas registros para cada uno de los primos hasta √N.
Si vas a iterar a través de todos los números enteros de todos modos, puedes descubrir la lista de primos que necesitas para caracterizar la cuadratura al mismo tiempo por el Tamiz de Erasthotenes, y construir la lista de residuos modulo cuadrados de los primos a medida que avanzas. Cada vez que encuentres un nuevo primo P, siempre que P 2 < N, añada P a la lista de primos para los que mantiene registros e inicialice un registro para los residuos módulo P 2 .
Como sugiere Ross en su respuesta, se pueden utilizar los resultados sobre la distribución de los números libres de cuadrados para obtener una cota superior para el N th número libre de cuadrados (debería crecer más lentamente que N ln(N) o así, en cualquier caso). Esto te da un límite superior en el número de registros que tienes que mantener mientras buscas enteros libres de cuadrados.
A partir de esto, deberías ser capaz de mostrar un límite superior asintótico de tiempo polinómico en el tiempo de ejecución de tu procedimiento.