Esto es esencialmente equivalente al problema clásico del círculo de Gauss. Su pregunta simplemente considera la diferencia finita de la función [matemática] N (r) [/ matemática] definida en la página de Wikipedia.
No hay una forma cerrada realmente agradable para esa función (lo cual no es sorprendente). Intuitivamente, uno debería esperar [matemáticas] N (r) = \ pi r ^ 2 + E (r) [/ matemáticas], donde [matemáticas] E (r) [/ matemáticas] es un pequeño término de error positivo. Gauss demostró [matemáticas] E (r) \ le 2 \ sqrt {2} \ pi r [/ matemáticas], y se conjetura que [matemáticas] E (r) = O (r ^ {1/2 + \ epsilon} ) [/ math] para cualquier [math] \ epsilon> 0 [/ math]. El límite inferior de [matemáticas] \ epsilon [/ matemáticas] se ha reducido con el tiempo (actualmente [matemáticas] 27/208 [/ matemáticas] según la página de Wikipedia), pero generalmente se cree que el único intento notable de probar la conjetura general ser incorrecto e inviable (¿Cuál es el estado del problema del círculo de Gauss?).
La implementación de [matemática] N (n) [/ matemática] en la respuesta de Robert Smith es más rápida que la fuerza bruta ingenua (intente cada [matemática] (x, y) [/ matemática] en el cuadrado [matemática] [- n, n ] \ times [-n, n] [/ math] y verifique si [math] x ^ 2 + y ^ 2 \ le n ^ 2 [/ math]), pero tiene el mismo rendimiento asintótico ([math] O ( n ^ 2) [/ matemáticas]).
- Dado que a + b = c + d y a ^ 3 + b ^ 3 = c ^ 3 + d ^ 3, ¿cómo pruebo que a ^ 2011 + b ^ 2011 = c ^ 2011 + d ^ 2011?
- Cómo demostrar por contradicción que para cualquier número real r, si [math] r ^ 2 [/ math] es irracional, entonces r es irracional
- Cómo hacer multiplicaciones en tu cabeza
- Cómo encontrar una suma de series [matemáticas] \ sum \ limits_ {n = 1} ^ {\ infty} \ frac {(- 1) ^ {n}} {n ^ {2} 3 ^ {n}} [/ matemáticas]
- ¿Cuántos números de teléfono de 6 dígitos hay, de los cuales los primeros 3 dígitos no se usan en los últimos 3 dígitos?
Esto es un poco lento para grandes n. Resulta que podemos obtener un algoritmo relativamente simple [matemático] O (n) [/ matemático], que nos permite (por ejemplo) calcular [matemático] N (10 ^ 6 + 1) – N (10 ^ 6) [/ matemática], que aparentemente es [matemática] 6282216 [/ matemática] (observe lo cerca que está de [matemática] 2 \ pi \ veces 10 ^ 6 \ aprox 6283185 [/ matemática]).
from math import floor def N(r): r = floor(r) s = 0 y = r for x in range(r): while x**2 + y**2 > r**2: y -= 1 s += y return 1 + 4*s print(N(1e6 + 1) - N(1e6))
Si n es tan grande que las operaciones de enteros no se pueden tratar como tiempo constante, se puede eliminar la cuadratura repetida. Esto proporciona un algoritmo [matemático] O (n \ log n) [/ matemático] usando solo unas pocas multiplicaciones y [matemático] O (n) [/ matemático] de adiciones.