Para no cometer errores, debes entender que la división por 97 es una división euclidiana, de donde proviene la presencia de módulo en tu título, imagino que lo habías comprendido...
Manu
Hola,
Para evitar problemas de precisión (hay que calcular con 8 cifras):
toma los 6 primeros dígitos, multiplica por 76 y suma los 7 últimos dígitos: 249117*76+5118195 = 24051087 divide por 97 24051087/97 = 247949.350515 toma la parte entera, multiplícala por 97 y réstala del número inicial 24051087-247949*97 = 34
La clave solicitada es el complemento a 97, es decir, 97-34 = 63
Manu
goldy91
Autor
Solo quiero saber de dónde sacó el número 76.
plustk
@goldy91El módulo de cualquier número redondeado a una potencia de 10 (ya sea 1000, 100000 o, como aquí, 10.000.000) es relativamente fácil de calcular. Por lo tanto, cualquier número sumado a este redondeo deberá integrar este módulo, y todo múltiplo de ese número tendrá un módulo multiplicado de la misma manera.
Por ejemplo: 1000 % 97 = 30 (1000 / 97 = 10,309278 luego 0,309278 * 97 = 30) Por lo tanto, 10.000 % 97 deberá ser 10x 30 (que aún debemos hacer % 97, etc.). Y así, 10.001 % 97 debe ser (10x 30 + 1) % 97. Por lo tanto, limitando la entrada a 4 o 5 cifras, cualquier número "aaa.bbb" módulo 97 es igual a (aaa x 30 + bbb) módulo 97
Dado que una calculadora estándar solo tiene 8 cifras, primero hacemos 10.000.000 / 97 = 103092,78 luego 0,78 x 97 = 76. Por lo tanto, cualquier número "a.aaa.aab.bbb.bbb" módulo 97 dará el mismo resultado que ("aaaaaaa" x 76 + "bbbbbbb") módulo 97.
Y para más de 13 cifras, podemos continuar: a.aaa.aab.bbb.bbc.ccc.ccc % 97 => ??? Primero 10.000.000.000.000 % 97 = (1.000.000 x 76 + 0) % 97 = 15 Por lo tanto, esto da (aaaaaa x 15 + bbbbbbccccccc) % 97. El cálculo aaaaaa x 15 + bbbbbbccccccc dará necesariamente un resultado de 13 cifras (o 14 si bbbbbb = 999999, pero el resto sigue siendo manejable para una calculadora de 8 cifras), y luego se repite con 76 como se mencionó anteriormente. Así que sí, sería necesario descomponer el cálculo en dos para hacer aaaaaa x 15 + bbbbbbccccccc (o realizar la suma en papel...) pero sigue siendo relativamente sencillo de llevar a cabo. Y podemos continuar así indefinidamente - siempre que tengamos tiempo para hacerlo - añadiendo los mismos pasos uno tras otro.
100 % 97 = 3 por lo que 1.000 % 97 = (3 * 10) % 97 = 30 por lo tanto 10.000 % 97 = (3 * 10^2) % 97 = 9 por lo tanto 100.000 % 97 = (3 * 10^3) % 97 = 90 por lo tanto 1.000.000 % 97 = (3 * 10^4) % 97 = 27 por lo tanto 10.000.000 % 97 = (3 * 10^5) % 97 = 76
de donde queda claro que: si (x % y) = z entonces (10x % y) = (10z % y) o más generalmente: (nx % y) = (n(x % y) % y) = (nz % y)
Dado que ((x+p) % y) = (((x % y) + p) % y) (para el módulo "y" de dos cifras sumadas, podemos reemplazar una o ambas por su módulo "y" sin cambiar el resultado) por lo tanto ((nx + p) % y) = ((n(x % y) + p) % y) y aún, si (x % y) = z, ((nx+p) % y) = (nz + p) % y
Por lo tanto, para cualquier múltiplo muy grande n de x (en este caso, los 6 dígitos más grandes de un número de 13 dígitos, que son por lo tanto un múltiplo "n" de "x" donde x = 10.000.000), si conocemos el resultado "z" de x % y (en este caso, 76 si y = 97), la ecuación para un número "a.aaa.aab.bbb.bbb" % 97 se convierte simplemente en (n * 76 + p) % 97 = ("aaaaaa" * 76 + bbbbbbb) % 97
Y finalmente, para un número de 31 dígitos "a.aaa.aab.bbb.bbc.ccc.ccd.ddd.dde.eee.eee" % y ... = ("aaaaaa" * (10^25 % y) + bbbbbbccccccddddddeeeeeee) % y = ("aaaaaa" * (10^25 % y) + ("bbbbbb" * (10^19 % y) + ccccccddddddeeeeeee) % y) % y y así sucesivamente, que termina en: = ("aaaaaa" * (10^25 % y) + ("bbbbbb" * (10^19 % y) + ("cccccc" * (10^13 % y) + ("dddddd" * (10^7 % y) + "eeeeeee" )))) % y
Para el módulo 97, sabemos que 10^7 % 97 = 76, por lo que "a.aaa.aab.bbb.bbc.ccc.ccd.ddd.dde.eee.eee" % 97 = ("aaaaaa" * (10^18 * 76 % 97) + ("bbbbbb" * (10^12 * 76 % 97) + ("cccccc" * (10^6 * 76 % 97) + ("dddddd" * 76 + "eeeeeee"))) % 97 Es fácil calcular 10^6 * 76 % 97 = 15 = ("aaaaaa" * (10^12 * 15 % 97) + "bbbbbb" * (10^6 * 15 % 97) + "cccccc" * 15 + "dddddd" * 76 + "eeeeeee") % 97 Una vez más, 10^6 * 15 % 97 = 17 = ("aaaaaa" * (10^6 * 17 % 97) + "bbbbbb" * 17 + "cccccc" * 15 + "dddddd" * 76 + "eeeeeee") % 97 Y finalmente, 10^6 * 17 % 97 = 71 = ("aaaaaa" * 71 + "bbbbbb" * 17 + "cccccc" * 15 + "dddddd" * 76 + "eeeeeee") % 97 Y dado que el resultado ("ffgggggg") % 97 puede superar las limitaciones de una calculadora básica, repetimos (ff * 76 + ggggggg) % 97 para mantener todo dentro de 8 dígitos.
mamiemando
Moderador
2491175118195 = 97*25682217713 + 34
¿Es eso lo que querías saber?
Buena suerte
mamiemando
Moderador
Más simplemente, solo necesitas usar una calculadora (por ejemplo, bc en Linux) o un lenguaje de programación y usar el operador módulo (notado como % en la mayoría de los lenguajes informáticos, ya sea en C, Java o PHP... ¡o bc!):
(mando@aldur) (~) $ bc bc 1.06.94 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. Este es software libre sin NINGUNA GARANTÍA. Para más detalles, escribe `warranty'. 2491175118195 % 97 34 97 - 34 63 quit
goldy91
Autor
Sí, en la computadora sé cómo hacerlo, pero me gustaría saber cómo hacerlo con una calculadora clásica.
olivier
Lo que parece que buscas calcular es un RIB. Escribe algoritmo RIB en Google y lo encontrarás.
olivier
Lo siento, dije rib, quería decir clave RIB.
blux
Moderador
No, no es una tarjeta de débito, sino la clave de un número de seguridad social...
--
A+ Blux
"Los tontos se atreven a todo. Es precisamente por eso que los reconocemos"
goldy91
Autor
OK gracias, ya empiezo a entender, pero Manu, ¿por qué elegiste 76?
mamiemando
Moderador
Para obtener menos de 13 cifras, ya puedes restar a mano un gran múltiplo de 97, como por ejemplo:
97*20000000000
Repitiendo este procedimiento, rápidamente disminuirás el número de cifras... (ahí ya tenemos más de 12 cifras). De hecho, es casi tan simple como hacer una división euclidiana a mano, como en primaria ^^
goldy91
Autor
Merci beaucoup en fait ma calculette n'était pas assez précise et me donnait le résultat sous forme d'exposant mais avec seulement 10 chiffres (c'était arrondi). Est-ce que tu sais comment avoir le résultat exact avec une calculette classique (Casio Graph 35+) ?
olivier
Si realmente no entiendes, te explico el famoso algoritmo bancario. Solo tienes que enviarme un correo a contact@olivierstern.com