Suma de cuatro cubos
- Alpertron
- Aplicaciones web
- Suma de cuatro cubos
Esta aplicación Web encuentra la descomposición de cualquier número entero no congruente a 4 ó 5 (mod 9) en una suma de cuatro cubos.
Fórmulas
El programa usa las siguientes fórmulas:
- 6x = (x − 1)³ + (−x)³ + (−x)³ + (x + 1)³
- 6x + 3 = x³ + (−x + 4)³ + (2x − 5)³ + (−2x + 4)³
- 18x + 1 = (2x + 14)³ + (−2x − 23)³ + (−3x − 26)³ + (3x + 30)³
- 18x + 7 = (x + 2)³ + (6x − 1)³ + (8x − 2)³ + (−9x + 2)³
- 18x + 8 = (x − 5)³ + (−x + 14)³ + (−3x + 29)³ + (3x − 30)³
- 54x + 20 = (3x − 11)³ + (−3x + 10)³ + (x + 2)³ + (−x + 7)³
- 72x + 56 = (−9x + 4)³ + (x + 4)³ + (6x − 2)³ + (8x − 4)³
- 108x + 2 = (−x − 22)³ + (x + 4)³ + (−3x − 41)³ + (3x + 43)³
- 216x + 92 = (3x − 164)³ + (−3x + 160)³ + (x − 35)³ + (−x + 71)³
- 270x + 146 = (−60x + 91)³ + (−3x + 13)³ + (22x − 37)³ + (59x − 89)³
- 270x + 200 = (3x + 259)³ + (−3x − 254)³ + (x + 62)³ + (−x − 107)³
- 270x + 218 = (−3x − 56)³ + (3x + 31)³ + (−5x − 69)³ + (5x + 78)³
- 432x + 380 = (−3x + 64)³ + (3x − 80)³ + (2x − 29)³ + (−2x + 65)³
- 540x + 38 = (5x − 285)³ + (−5x + 267)³ + (3x − 140)³ + (−3x + 190)³
- 810x + 56 = (5x − 755)³ + (−5x + 836)³ + (9x − 1445)³ + (−9x + 1420)³
- 1080x + 380 = (−x − 1438)³ + (x + 1258)³ + (−3x − 4037)³ + (3x + 4057)³
- 1620x + 1334 = (−5x − 3269)³ + (5x + 3107)³ + (−9x − 5714)³ + (9x + 5764)³
- 1620x + 1352 = (−5x + 434)³ + (5x − 353)³ + (9x − 722)³ + (−9x + 697)³
- 2160x + 362 = (−5x − 180)³ + (5x + 108)³ + (−6x − 149)³ + (6x + 199)³
- 6480x + 794 = (−5x − 83)³ + (5x + 11)³ + (−6x − 35)³ + (6x + 85)³
Si n = 164, 596, 1892, 2324, 2756, 4052, 4484 (mod 6480) se utiliza la fórmula:
54x + 2 = (29484x² + 2211x + 43)³ + (−29484x² − 2157x − 41)³ + (9828x² + 485x + 4)³ + (−9828x² − 971x − 22)³
Si n = 254, 902, 1442, 1874, 1982, 2414, 3062, 3494, 3602, 4034, 4142, 5114, 5222, 5654, 5762, 6302 (mod 6480) se utiliza un método debido a Demjanenko que puede dar resultados de cientos de dígitos.
En el resto de los casos se reemplaza n por −n y luego se multiplican las soluciones por −1.
Expresiones
Además de ingresar números en la caja de entrada, se pueden escribir expresiones numéricas incluyendo paréntesis. A continuación se muestran las operaciones permitidas:
- + 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.
- Ans: obtiene la última respuesta.
- AND, OR, XOR, NOT para lógica binaria. Las operaciones se hacen en binario (base 2). Se agregan infinitos ceros (unos) a la izquerda de los números positivos (negativos).
- SHL o <<: Si b ≥ 0, a SHL b desplaza el valor a a la izquierda la cantidad de bits especificada por b. Esto equivale a a × 2b. En caso contrario, a SHL b desplaza el valor a a la derecha la cantidad de bits especificada por −b. Esto equivale a floor(a / 2−b). Ejemplo: 5 SHL 3 = 40.
- SHR o >>: Si b ≥ 0, a SHR b desplaza el valor a a la derecha la cantidad de bits especificada por b. Esto equivale a floor(a / 2b). En caso contrario, a SHR b desplaza el valor a a la izquierda la cantidad de bits especificada por −b. Esto equivale a a × 2−b. Ejemplo: -19 SHR 2 = -5.
- n!: factorial (n debe ser mayor o igual que cero). Ejemplo: 6! = 6 × 5 × 4 × 3 × 2 = 720.
- n!! ... !: factorial múltiple (n debe ser mayor o igual que cero). Es el producto de n por n − k por n − 2k ... (todos los números son mayores que cero) donde k es la cantidad de signos de exclamación. Ejemplo: 7!! = 7 × 5 × 3 × 1 = 105.
- p#: primorial (producto de todos los primos menores o iguales a p). Ejemplo: 12# = 11 × 7 × 5 × 3 × 2 = 2310.
- B(n): Número probablemente primo anterior a n. Ejemplo: B(24) = 23.
- F(n): Número de Fibonacci Fn que corresponde a la secuencia 0, 1, 1, 2, 3, 5, 8, 13, 21, etc. donde cada elemento es igual a la suma de los dos anteriores. Ejemplo: F(7) = 13.
- L(n): Número de Lucas Ln = Fn-1 + Fn+1
- N(n): Número probablemente primo posterior a n. Ejemplo: N(24) = 29.
- P(n): particiones irrestrictas (cantidad de descomposiciones de n en sumas de números enteros sin tener en cuenta el orden). Ejemplo: P(4) = 5 porque el número 4 se puede particionar de 5 formas distintas: 4 = 3+1 = 2+2 = 2+1+1 = 1+1+1+1.
- Gcd(m,n, ...): Máximo común divisor de estos números enteros. Ejemplo: GCD(12,16) = 4.
- Lcm(m,n, ...): Mínimo común múltiplo de estos números enteros. Ejemplo: LCM(12,16,24) = 48.
- Modinv(m,n): inverso de m modulo n, sólo válido cuando m y n son coprimos, es decir que no tienen factores en común. Ejemplo: Modinv(3,7) = 5 porque 3 × 5 ≡ 1 (mod 7)
- Modpow(m,n,r): halla mn módulo r. Ejemplo: Modpow(3, 4, 7) = 4, porque 34 ≡ 4 (mod 7).
- Totient(n): cantidad de enteros positivos menores que n coprimos con n. Ejemplo: Totient(6) = 2 porque 1 y 5 no tienen factores en común con 6.
- Jacobi(m,n): obtiene el símbolo de Jacobi de m y n. Cuando el segundo argumento es primo, el resultado es cero si m es múltiplo de n, es uno si hay una solución a x² ≡ m (mód n) y es igual a −1 cuando la congruencia mencionada no tiene soluciones.
- Random(m,n): número entero aleatorio entre m y n.
- Abs(n): valor absoluto de n.
- IsPrime(n): retorna cero si n no es un primo probable y -1 si lo es. Ejemplo: IsPrime(5) = -1.
- Sqrt(n): parte entera de la raíz cuadrada del argumento.
- Iroot(n,r): Raíz r-ésima entera del primer argumento. Ejemplo: Iroot(8, 3) = 2.
- NumDigits(n,r): cantidad de dígitos de n en base r. Ejemplo: NumDigits(13, 2) = 4 porque 13 en binario (base 2) se expresa como 1101.
- SumDigits(n,r): suma de dígitos de n en base r. Ejemplo: SumDigits(213, 10) = 6 porque la suma de los dígitos expresados en decimal es 2+1+3 = 6.
- RevDigits(n,r): halla el valor que se obtiene escribiendo para atrás los dígitos de n en base r. Ejemplo: RevDigits(213, 10) = 312.
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 cubos.
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 obtener la descomposición como suma de cubos 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 cubos.
- Quinta expresión (opcional): Si esta expresión no vale cero (indicando verdadero), se muestra o descompone en suma de cubos 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 cubos 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 cubos de los primeros 100 números de la forma primo impar menos uno.
La línea a escribir es: x=3;x=n(x);c<=100;x-1
.
La cuarta expresión se puede reemplazar por una cadena de formato y varias expresiones. La cadena de formato indica lo que se debe mostrar en pantalla. Dentro de esta cadena se pueden especificar cláusulas de conversión que comienzan con el carácter de porcentaje y pueden ser en minúsculas o mayúsculas:
- %D: mostrar la expresión como un número en decimal.
- %X: mostrar la expresión como un número en hexadecimal.
- %L: mostrar sí si la expresión no es cero y no si es cero.
- %FD: descomponer en suma de cubos y mostrar los valores en decimal.
- %FX: descomponer en suma de cubos y mostrar los valores en hexadecimal.
Las expresiones se escriben después de la cadena, separadas por dos puntos. También debe haber dos puntos entre la cadena y la primera expresión.
Para mostrar el símbolo de procentaje, se deben usar dos símbolos de porcentaje seguidos, y la comilla se representa mediante un símbolo de porcentaje seguido por una comilla.
Ejemplo 3: Por cada número entre 0 y 100, mostrar si el número es primo y luego mostrar la descomposición como suma de cubos tanto en decimal como en hexadecimal.
La línea a escribir es: x=0; x=x+1; <=100; "%d es primo: %l, %Fd, %Fx":x:isprime(x):x:x
Código fuente
Se puede bajar el código fuente de este programa y el del viejo applet de suma de cuatro cubos 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 3 de agosto de 2023.
Si encuentra algún error o tiene algún comentario, por favor llene el formulario.
Si le gustan estas calculadoras y desea soportar el software libre sin propagandas molestas, puede donar a través de PayPal.