elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 13:10  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Desafíos - Wargames (Moderador: Kasswed)
| | | |-+  Para programadorez y matematicos
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Para programadorez y matematicos  (Leído 4,408 veces)
jvchino
Solo soy un
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.993


La felicidad no es una meta, es un camino.


Ver Perfil
Re: Para programadorez y matematicos
« Respuesta #15 en: 26 Septiembre 2005, 08:37 »

ERROR...

Lo he probado con un número al azar, 25 para ser exacto... y me da como resultado:

Código:
Numero anterior a los ceros 5
Despues de este hay 5 cifras cero

Lo cual es incorrecto... 25! termina en seis ceros y su última cifra significativa es 4.


Saludos.



EDITADO

Lo olvidaba 43051! termina en 10759 ceros.

43051 entre 5 = 8610
  8610 entre 5 = 1722
  1722 entre 5 =   344
    344 entre 5 =    68
      68 entre 5 =    13
      13 entre 5 =      2

Que sumados nos da: 10759




« Última modificación: 26 Septiembre 2005, 08:53 por jvchino » En línea

Si ayudo a una sola persona a tener esperanza, no habré vivido en vano.

No, nada llega tarde, porque todas las cosas
tienen su tiempo justo, como el trigo y las rosas
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Para programadorez y matematicos
« Respuesta #16 en: 26 Septiembre 2005, 13:59 »

esta bien que no mandaran privado, me gusto observar como lo tratan de hacer, de hecho. no mas privado, este es un reto colectivo.

buen trabajo los 2.

lo de jvchino, lo explico:
12!
2*3*4*5*6*7*8*9*10*11*12 =
2^10*3^5*5^2*7*11 =
479001600
hay 2 numeros 5, hay 2 ceros. ;D

lo de henry:

tu programa no funciona desde el factorial de 15, pero muy buen trabajo.

el motivo es este:

8717829120000000000000000000 = 14!
el 2 por 15
30
tomas el 3
pero...
12*15=180, debes tomar el 8.


« Última modificación: 26 Septiembre 2005, 14:14 por Sirdarckcat » En línea

- Henry -

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: Para programadorez y matematicos
« Respuesta #17 en: 26 Septiembre 2005, 18:27 »

Tienen razón...
creo que me falto hacer mas pruebas, en fin... el problema me sigue siendo interesante.
ah, y no soy Mateatico solo fue una idea abstracta que tube, pero, le buscare por otro lado.
En línea
jvchino
Solo soy un
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.993


La felicidad no es una meta, es un camino.


Ver Perfil
Re: Para programadorez y matematicos
« Respuesta #18 en: 27 Septiembre 2005, 03:52 »

Podría agregar que la última cifra significativa del factorial de cualquier número siempres será cifra par.

Sirdarckcat, si tienes la respuesta... compárala con la que te mando en privado para que siga siendo un reto para los demás.  El programa está 100% probado.

Saludos.
En línea

Si ayudo a una sola persona a tener esperanza, no habré vivido en vano.

No, nada llega tarde, porque todas las cosas
tienen su tiempo justo, como el trigo y las rosas
jvchino
Solo soy un
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.993


La felicidad no es una meta, es un camino.


Ver Perfil
Re: Para programadorez y matematicos
« Respuesta #19 en: 30 Septiembre 2005, 03:09 »

Estuve leyendo un libro super viejo, y por casualidad encontré la manera de determinar la última cifra significariva del factorial de un número.

Ya lo probé y funciona.  Me da los mismos resultados que el programa que desarrollé y le envié a Sirdarckcat,  pero mucho más rápido.

Si gustan decargarlos al final de mi mensaje.  (archivo: factorial.zip)

No publico el código fuente o algoritmo por si alguien quiere seguir intentándolo.  Pero con gusto lo publicaré si me lo piden.

P.D.  El archivo contiene dos ejecutables: el primero es cien por ciento mío y el otro con lo que encontré en el libro.


EDITED
Programa corregido. Gracias Sirdarckcat
« Última modificación: 30 Septiembre 2005, 07:28 por jvchino » En línea

Si ayudo a una sola persona a tener esperanza, no habré vivido en vano.

No, nada llega tarde, porque todas las cosas
tienen su tiempo justo, como el trigo y las rosas
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Para programadorez y matematicos
« Respuesta #20 en: 30 Septiembre 2005, 05:24 »

jeje, interesante..

¿que libro es? que tengo a mi dispocision un gran gran biblioteca de programacion y estos topicos, y me gustaria ver como funciona, que el que yo use, era 2 cosas:

lento y aburrido

el de jvchino es:

normal y ordenado

esque en el mio usé java, y hubieran visto el problemota que tenia con los strings... mientras que jvchino.. pues sin comentarios.. lo unico malo que vi es que no saca factoriales mayores a 15 cifras.. correctos

osea el factorial de un numero de 15 cifras, que bueno.. estaria loco si se los pidiera verdad? debe ser por la longitud de variables que puede acomodar..

en mi codigo para sacar un numero de 15 cifras, el programa multiplicaria un numero 15 cifras por  otro, el de jvchino, multiplica todos los numeros antes del significativo por el numero siguiente.

esto considerenlo una super pista. pero si hay algun matematico por ahi, enseñeme una manera de sacar el resutado sin necesitar siquiera conocer que es programacion.
se que se puede, de hecho en eforos.net estuvieron cerca, pero se murio el foro, que lastima, yo llegue y coloque mi resultado, pero solo pedian el factorial de 1000, aunque bueno..
Intentenlo, piensen ;) Saludos.

(postdata, greios, yusent, 0_Kool, ILTrovatore si leen esto avisenme si revive no porfa? mi mail es sirdarckcat en gmail punt0 com)
En línea

jvchino
Solo soy un
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.993


La felicidad no es una meta, es un camino.


Ver Perfil
Re: Para programadorez y matematicos
« Respuesta #21 en: 30 Septiembre 2005, 06:28 »

Citar
lo unico malo que vi es que no saca factoriales mayores a 15 cifras

Eso es limitación de software...  el máximo número entero que soporta el pascal es "2147483647", ni siquiera llega a 11 cifras  :-\
En línea

Si ayudo a una sola persona a tener esperanza, no habré vivido en vano.

No, nada llega tarde, porque todas las cosas
tienen su tiempo justo, como el trigo y las rosas
jvchino
Solo soy un
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.993


La felicidad no es una meta, es un camino.


Ver Perfil
Re: Para programadorez y matematicos
« Respuesta #22 en: 30 Septiembre 2005, 07:41 »

Si quieres hacerlo manualmente, te explico lo que entendí (digo lo que entendí porque el libro estaba en Inglés).
La explicación matemática es un poco confusa (se basa en residuos de 20)... pero el procedimiento para programarlo o hacerlo a mano es sencillo.

Es un bucle, por cada iteración se calculan dos factores secundarios (FS1 y FS2), estos se multiplican y obtienes otro factor (F1, F2, F3,...).
Luego multiplicas  F1 x F2 x F3 x F4 ...
La última cifra de ese producto es la última cifra del factorial.

FS1, solo puede tener dos valores.
- Si la división N entre 20 es exacta entonces FS1 = 6
- Caso contrario FS1 = 1

Para FS2, creas un vector de restos y factores, si el resto (residuo) es 0 el FS2 es 1; si el resto es 1 el FS2 es 1, si el resto es 2 el FS2 es 2, si el resto es 3 el FS2 es 6... (mejor miren la tabla)

Resto   FS2
  0      1
  1      1
  2      2
  3      6
  4      4
  5      2
  6      2
  7      4
  8      2
  9      8
 10      4
 11      4
 12      8
 13      4
 14      6
 15      8
 16      8
 17      6
 18      8
 19      2


Tomemos como ejemplo el número 43051.

Primera iteración
 43051 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 11 => FS2 = 4
 Calculamos F1 = 1 x 4  = 4

 Dividimos 43051 entre 5 y tomamos la parte entera = 8610

Segunda iteración
 8610 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 10 => FS2 = 4
 Calculamos F2 = 1 x 4  = 4

 Dividimos 8610 entre 5 y tomamos la parte entera = 1722

Tercera iteración
 1722 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 2 => FS2 = 2
 Calculamos F3 = 1 x 2  = 2

 Dividimos 1722 entre 5 y tomamos la parte entera = 344

Cuarta iteración
 344 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 4 => FS2 = 4
 Calculamos F4 = 1 x 4  = 4

 Dividimos 344 entre 5 y tomamos la parte entera = 68

Quinta iteración
 68 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 8 => FS2 = 2
 Calculamos F5 = 1 x 2  = 2

 Dividimos 68 entre 5 y tomamos la parte entera = 13

Sexta iteración
 13 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 13 => FS2 = 4
 Calculamos F6 = 1 x 4  = 4

 Dividimos 13 entre 5 y tomamos la parte entera = 2

Séptima iteración
 2 entre 20
 La división no es exacta => FS1 = 1
 El residuo es 2 => FS2 = 2
 Calculamos F7 = 1 x 2  = 2

 Dividimos 2 entre 5 y tomamos la parte entera = 0

Aquí termina el proceso, cuando el cociente es CERO.


Ahora se multiplican todos los EFES
 F1 x F2 x F3 x F4 x F5 x F6 x F7 = 2048

Por lo tanto el factorial de 43051 termina en 8


Obviamente es mucho más rápido que el primero que hice.  En el anterior necesitaba hacer 43051 iteraciones, en este solamente 7.

Saludos.


P.D.  Queda en ustedes programarlo.
En línea

Si ayudo a una sola persona a tener esperanza, no habré vivido en vano.

No, nada llega tarde, porque todas las cosas
tienen su tiempo justo, como el trigo y las rosas
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines