Factorial hasta 1000
Alguien me podria ayudar, necesito saber como puedo hacer factorial hasta n numeros, su limite es 1000, y no se si hay algun tipo de variable que tenga capacidad para un numero tan grande como el factorial de 1000.
Les agradezco.:D |
Hola
Podrías usar una variable de tipo extended: Extended: 3.4 x 10^-4932 a 1.1 x 10^4932. Creo que el factorial de 1000 es menor que 1.1 x 10^4932. Saludos |
Hola
El factorial de 1000 es = 4,02387260077094 E2567 Saludos |
Te agradezco la ayuda, no estaba seguro del tipo de variable que necesitaba, pero gracias ya lo probe y funciona bien.:D:D:D
|
Bueno, el factorial de 1000 tiene 2.568 cifras :eek: Lamento decir que no existe (al menos no conozco) ninguna variable numérica de delphi que soporte ese numero de cifras. Así que toca hacerlo "a mano", para esto vamos a echar mano de los números "SuperLargos" que ya describir en algún otro hilo. No es la forma mas eficiente de hacerlo, pero funciona :D :
Aunque es mejor que te lo tomes con tranquilidad, en mi equipo tardo 8 minutos y 21 segundos en calcular el factorial de 1000. Por si alguien tiene curiosidad, esta es la salida del programa: Código:
Calculando el factorial de 1000 ... |
Hay una forma aproximada de calcular el factorial de un número muy grande, es a través de la fórmula de Sterling:
N! := Sqr(2 * PI * N) * (N / E) ^ N Saludos |
Hola,
Yo no he dejado de hacer otras cosillas y bueno... Código:
Calculando el factorial de 1000 ... |
Cita:
|
Buena idea dec, ¿alguno tiene uno de esos procesadores de doble núcleo y un montón de Mhz? :D Lo digo por comparar ...
|
Me gustó, es un muy buen código.
Mañana lo voy a probar en freepascal bajo ubuntu a ver cuanto tarda, de ese modo vamos a compara linux vs windows. Saludos |
Pues yo obtuve este resultado: 0:11:15
En un AMD Duron de 1,16 Ghz, RAM: 480 Mb, Window$ XP Profesional versión 2002 (5.1) SP2 Esto me hace recordar a algunas comparaciones de algoritmia que hacía de cuando era joven:p:D, snif... ¡que recuerdos aquellos! Y ahora que hago memoria... es posible que nunca vuelva a recuperar el libro (original. No copia) de Estructuras de datos y algoritmos... no debí haberlo prestado. Justo cuando lo necesito para repasar algunas cosas que no recuerdo y no tomé apunte:( (menos mal que existe San Google:D) ¿Puede considerarse como una religión, o acaso me debo conformar con la religión de los simpson:D? Saludos, PD: No se porque pero que me dieron cuerda... soy una máquina de decir... pe.......:p |
Voy a dar ejemplo y poner mis resultados.
En un AthlonXP 2600 / 512MB de RAM / Ubuntu 7.04 / Wine 0.9.33 -- > 07:08 En un AthlonXP 1800 / 512 de RAM / WindowsXP SP2 --> 08:14 Era de esperar que en el ordenador mas rápido el calculo se terminara antes, lo que no era tan previsible es que ejecutando el programa sobre linux con la ayuda de wine se obtuviera un resultado tan bueno. Que cada uno saque sus conclusiones .... |
Tengo un pequeño problema: cuando ejecuto el programa no me da el tiempo empleado sino un número con formato de hora, por ejemplo 12:05:34 am
No se que es lo que anda mal porque yo no toqué para nada el código |
El timepo se calcula como la diferencia entre do TDateTime:
El resultado de esta operación también es un TDateTime. El problema puede ser al convertir esa variable a texto, seguramente por la configuración de la hora en tu equipo este interpretando lo que debería ser "05:34" como "12:05:34". ¿Que equipo tienes? ¿05:34 te parece que es el tiempo que mas o menos le llevo? |
Acabo de comprobar que como ya advertía no es la forma mas eficiente de hacerlo, por ejemplo en python, un script tan sencillo como este:
Código:
a=1 |
Cita:
Ver Imagen: factorial1pz28z6.jpg Código:
Intel(R) Core(TM) 2 CPU |
Cita:
En mi compu tu código se ejecuta en 5:25 bajo windows, es una máquina con micro intel em64t 3.08 Ghz con 512 mb de Ram. |
Cita:
La segunda vez, este ha sido el resultado: Código:
Calculando el factorial de 1000 ... Mientras el programa estaba funcionando yo iba haciendo cosas, pero no creo que afecte mucho, pq solo uno de los procesadores estaba trabajando al 100% (50% del total). Saludos. |
:eek: La leche, de donde sacáis tremendos equipos. El mio parece un ábaco al lado de los vuestros :(
Cita:
Se me hace raro que delphi no pueda manejar números tan grandes. En otra ocasión el amigo Roman nos hablo del tipo TBCD, pero ni siquiera el soporta 1000 cifras. ¿Alguien conoce algún algoritmo eficiente de multiplicación para números grandes? Solo por curiosidad ... |
1 Archivos Adjunto(s)
Bueno, alguien que crea un programa para no tener que resolver los sudokus a mano :D, no podía contentarse con el algoritmo anterior.
Así que considerando que que 1000, incluso 10000, nos cabe dentro de una variable de tipo integer, podemos optimizar "un poco" el algoritmo de multiplicación.
La nueva marca es de tan solo 589 milisegundos :eek: Que a gusto me he quedado :p :D Edito: El factorial de 10,000 (35,659 cifras) tarda 67,202 milisegundos, poco mas de un minuto. Si alguien tiene curiosidad de saber cual es que se baje el adjunto :D |
Se emplearon 106 milisegundos....
|
Cita:
|
Cita:
|
Cita:
|
Estas son mis marcas:
fact 1000 = 285 miliseg fact 10000 = 2334 miliseg fact 100000 = 27239 miliseg En windows, no he probado usarlo con wine en ubuntu al programa Fast. Yo quise probar en freepascal pero hay algo que no anda bien, un error que dice que Result[i] es desconocida, tal vez alguna librería que no agregué. Saludos |
Cita:
Menos mal que no probé la versión en mi anterior "fitito": un Pentium con 333 Mhz, 128 Mb RAM y Windows 2000:eek::p Tendría que ver, por cuiosidad, lo que hay en el archivo adjunto y probarlo. Después si me da la cabeza le hago un analisis de complejidad... ¡Lo que uno hace para salir y evitar las obligaciones!;):D EDITO: Lei mal... pensaba que en el archivo adjunto estaba el código para probar :p ... Un pequeño error de lectura. Pues que es un número grande... Saludos, |
Bueno, y volviendo al tema original del hilo.
Creo que el amigo Cheswar ya eliminó su duda. Aunque me llama la atención la necesidad de generar el factorial de números tan grandes. Un tema que ya fue ampliamente estudiado hace años... No se cual será su objetivo, por lo general se deja estos tipos de ejercicios: factoriales, recursividad, numeros primos, capicuas... como inicio en la programación. Me cuesta capturar el sentido práctico, como programación, el hallar un número tan grande. Si tiene sentido en cambio si se quiere hacer un estudio de algoritmos... aunque como dije ya fue discutido hace tiempo. De cualquier manera, Cheswar se ha llevado ya las respuestas. Este post ha sido escrito no con la finalidad de tirar malas impresiones, sino como un intento de volver a canalizar los objetivos iniciales del hilo. En un rato podría volver con el estudio de los algoritmos. Haciendo una comparación entre la versión lenta y rápida. Si es que le sirve de sustento a Cheswar (y claro... si el está de acuerdo e interesado). Saludos, |
Pido disculpas por los resultados para factorial de 10000 y de 100000. ¡Son valores erróneos! no se en que estaba pensando cuando puse eso.
Saludos |
Cita:
Cita:
|
En mi equipo el código expuesto por Seoane tal cual está se tarda 450 milisegundos en ejecutarse compilado en Delphi 2007, pero si le agrego a los procedimientos la sentencia inline se tarda solo 196 milisegundos!!!
En uno de esos equipos de doble nucleo que traen hasta aeromozas incluidas debe ser un tiro usando inline |
La franja horaria es GMT +2. Ahora son las 17:02:10. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi