El conocido "Suma de los Cuadrados de la Función" indica el número de maneras en que puede representar un entero como suma de dos cuadrados. El enlace para ver los detalles, pero se basa en el recuento de los factores del número N en potencias de 2, potencias de números primos = 1 mod 4 y potencias de números primos = 3 mod 4.
Dada esta factorización, es fácil encontrar el número de maneras de descomponer N en dos plazas. Pero, ¿cómo de manera eficiente enumerar las descomposiciones?
Así, por ejemplo, dado N=2*5*5*13*13=8450 , me gustaría generar los cuatro pares:
13*13+91*91=8450
23*23+89*89=8450
35*35+85*85=8450
47*47+79*79=8450
La obvia algoritmo (que he usado para el ejemplo anterior) es simplemente tomar yo=1,2,3,...,$\sqrt{N/2}$ y prueba si (N-i*i) es un cuadrado. Pero que puede ser caro para la gran N. ¿hay una manera de generar los pares de manera más eficiente? Ya tengo la factorización de N, que pueden ser útiles.
(Usted puede en lugar de iterar entre el $i=\sqrt{N/2}$ e $\sqrt{N}$ pero eso es sólo una constante de ahorros, todavía es $O(\sqrt N)$.