Estoy buscando algo de ayuda refutar una respuesta a una pregunta de StackOverflow que he publicado acerca de la computación en el número de doble plaza combinaciones para un entero dado.
La pregunta original es de el Facebook Hacker Cup
Fuente: Facebook Hacker Cup La Calificación De La Ronda De 2011
Un doble-cuadrado número es un entero $X$ que puede ser expresado como la suma de dos cuadrados perfectos. Por ejemplo, 10 es un doble cuadrado debido a $10 = 3^2 + 1^2$. Dado $X$, ¿cómo podemos determinar el número de maneras en que puede ser escrito como la suma de dos cuadrados? Para ejemplo, $10$ sólo puede ser escrito como $3^2 + 1^2$ (no contamos $1^2 + 3^2$ como ser diferente). Por otro lado, $25$ puede ser escrito como $5^2 + 0^2$ o como $4^2 + 3^2$.
Usted necesita para resolver este problema para $0 \leq X \leq 2,147,483,647$.
Ejemplos:
$10 \Rightarrow 1$
$25 \Rightarrow 2$
$3 \Rightarrow 0$
$0 \Rightarrow 1$
$1 \Rightarrow 1$
En respuesta a mi pregunta original sobre la optimización del este de F#, recibí la siguiente respuesta que yo soy incapaz de confirmar resuelve el problema dado correctamente.
Fuente: respuesta de StackOverflow por Alexandre C.
De nuevo, el número de soluciones entero de $x^2 + y^2 = k$ es de cuatro veces el número de primos divisores de $k$ que son iguales a $1 \bmod 4$.
Sabiendo esto, escribir un programa que da el número de soluciones es fácil: calcular los números primos hasta el $46341$ una vez y para todos.
Dado $k$, calcular el primer divisores de $k$ mediante el uso de la lista de arriba (la prueba de $\sqrt{k}$). El recuento de los que son igual a $1 \bmod 4$, y la suma. Multiplicar respuesta $4$.
Cuando voy a través de este algoritmo para $25$, I se $8$ lo cual no es correcto.
- Para cada primer factor (pf) de $25$ (5,5 son los principales factores de $25%)
- si pf % 4 = 1 (true 5), agregar 1 a contar
- volver 4 * count (recuento sería de 2 aquí).
Así, por $25$, este sería de 8