Suma de cuatro cuadrados

Este applet encuentra la descomposición de cualquier número natural de hasta 10000 dígitos en una suma de hasta cuatro cuadrados.

Como el programa no factoriza el número entrado por el usuario, en algunos casos se mostrarán tres cuadrados donde una suma de dos bastaría. Por ejemplo, 10000998089 = 95317² + 30260².

Si encuentra algún error o tiene algún comentario, por favor llene el formulario.

Vea los métodos que usa este applet.

Expresiones

Se pueden entrar expresiones que usen los siguientes operadores y paréntesis:

  • + para suma
  • - para resta
  • * para multiplicación
  • / para división entera
  • % para el resto de la división entera
  • ^ o ** para exponenciación (el exponente debe ser mayor o igual que cero).
  • <, ==, >; <=, >=, != para comparaciones. Los operadores devuelven cero si es falso y -1 si es verdadero.
  • AND, OR, NOT para lógica binaria.
  • n!: factorial (n debe ser mayor o igual que cero).
  • p#: primorial (producto de todos los primos menores o iguales a p).
  • B(n): Número probablemente primo anterior a n
  • F(n): Número de Fibonacci Fn
  • L(n): Número de Lucas Ln = Fn-1 + Fn+1
  • N(n): Número probablemente primo posterior a n
  • P(n): particiones irrestrictas (cantidad de descomposiciones de n en sumas de números enteros sin tener en cuenta el orden).
  • Gcd(m,n): Máximo común divisor de estos dos números enteros.
  • Modinv(m,n): inverso de m modulo n, sólo válido cuando gcd(m,n)=1.
  • Modpow(m,n,r): halla mn módulo r.
  • IsPrime(n): returna cero si n no es un primo probable y -1 si lo es.
  • NumDigits(n,r): cantidad de dígitos de n en base r.
  • SumDigits(n,r): suma de dígitos de n en base r.
  • RevDigits(n,r): halla el valor que se obtiene escribiendo para atrás los dígitos de n en base r.

Puedes usar el prefijo 0x para números hexadecimales, por ejemplo 0x38 es igual a 56.

Procesamiento en lotes

Escribe una expresión por línea, y luego aprieta el botón Suma de cuadrados.

Las líneas en blanco o de comentarios (que comienzan con el carácter numeral '#') se replicarán en la salida.

Expresión para ciclos: con la siguiente sintaxis podrás factorizar o determinar si varios números son primos con sólo digitar una línea. Deberás escribir cuatro o cinco expresiones separadas por puntos y coma:

  • Primera expresión: Debe comenzar con la cadena 'x=' e indica el primer valor para la variable x.
  • Segunda expresión:Debe comenzar con la cadena 'x=' e indica el siguiente valor para la variable x.
  • Tercera expresión: Contiene la expresión de finalización del ciclo. Si es distinto que cero (indicando verdadero) el ciclo termina, en caso contrario, continúa.
  • Cuarta expresión: Contiene la expresión que se debe expresar como suma de cuadrados.
  • Quinta expresión (opcional): Si esta expresión no vale cero (indicando verdadero), se muestra o factoriza la cuarta expresión, y si es cero (indicando falso), se ignora la cuarta expresión.

Excepto la primera expresión, las demás expresiones deben incluir la variable x y/o el contador c.

Si la expresión de finalización es falsa después de procesar 1000 números, aparecerá el botón Continuar. Apretando este botón hará que el programa procese los siguientes 1000 números, y así sucesivamente.

Ejemplo 1: Hallar la descomposición en suma de cuadrados de los números entre cero y 5000. La línea a escribir es: x=0;x=x+1;x<=5000;x. La calculadora mostrará los resultados en bloques de 1000 valores. Deberá presionar el botón Continuar para obtener el siguiente bloque.

Ejemplo 2: Hallar la descomposición en suma de cuadrados de los primeros 100 números de la forma primo menos uno. La línea a escribir es: x=3;x=n(x);c<=100;x-1.

Código fuente

Se puede bajar el código fuente de este programa y el del viejo applet de suma de cuatro cuadrados desde GitHub. El código fuente está escrito en lenguaje C, por lo que es necesario Emscripten para generar Javascript.

Escrito por Dario Alpern. Actualizado el 15 de enero de 2018.