2009-06-26 4 views
18

Todavía soy un estudiante, y el proyecto Euler me resulta muy divertido.¿La mejor biblioteca de bignum para resolver problemas de Project Euler en C++?

En ocasiones, la pregunta requiere cálculos que son más grandes que los tipos primitivos. Sé que puedes poner en práctica, pero yo soy demasiado perezoso para hacer esto,

así que he intentado algunas bibliotecas,

MAPM :: muy buen rendimiento, pero sólo proporciona grandes flotadores, con la posibilidad de comprobar si es un número entero. muy bueno para aceptar entradas, pero desagradable para proporcionar resultados, y compila como magia con Visual C++ 2008 express.

bigint :: una pequeña, pero necesita una reingeniería en muchas partes. Muy simple de usar, pero con un poder muy limitado y muy lento en comparación con otros. solo enteros grandes

ttmath :: la más bella que he probado hasta ahora !, solo algunos archivos para incluir y usted tiene una potencia/simplicidad increíble. Compila como magia en Visual C++ 2008 express. Es rápido, ya que proporciona números de longitud fija. Está construido con metaprogramación en C++. La única desventaja que veo, es que los números no son arbitrarias de longitud en tiempo de ejecución, pero se puede tener 1024K números al escribir código muy fácilmente,

ttmath::UInt<1024 * 1024> reallyHugeUnsignedInteger; 

Proporciona tres tipos: firmada, sin firmar y el flotador.

Intenté compilar gmp bajo VC2008 express, ¡pero fallé! Sé que es el mejor, pero no es fácil de compilar para un principiante con el VC2008 express, agradezco también que indique un tutorial para compilar gmp en VC.

EDITAR :: Si sabe cómo compilar GMP utilizando VC 2008, por favor me explique y obtener la recompensa :)

EITD :: Parece que no estaba usando los términos adecuados, Así que aquí está el mágico GMP para Windows! funciona con VC 2008 :)MPIR

+5

Nota: Es posible que necesite una biblioteca bignum para resolver algunos problemas, pero la mayoría de los problemas de Euler realmente no lo necesitan. Cuando necesite encontrar alguna propiedad de un número muy grande, generalmente es muy ineficiente calcularla realmente para encontrar la propiedad. A menudo necesita analizar el problema y encontrar una mejor solución. Por ejemplo, si necesita encontrar el número de ceros en 1000 !, calculando el valor real de 1000! sería una solución muy ineficiente. –

+0

buen punto, pero no siempre obtengo la solución óptima :) – AraK

+4

@Igor: si la solución ineficiente se ejecuta en menos de un segundo y tarda unos minutos en escribirse, no estoy interesado en la eficiente.Sí, he hecho algunas preguntas de Euler, y sí, ha habido ocasiones en las que arrojar GMP al problema lo ha resuelto de inmediato. 1000! tiene menos de 10 000 dígitos binarios, es probable que sea bastante trivial calcular en una PC. ¡Ciertamente es más rápido que calcular el número de ceros finales en 1000! a mano (aunque, concedido, eso tampoco es tan complicado). –

Respuesta

1

GMP. API simple, ha existido por siempre.

Editar: Ah, lo intentó. Realmente lo volvería a intentar, es lo mejor.

+1

Como dije, nunca lo hice funcionar bajo VC :( – AraK

+0

sugerencia: para el beneficio de otros lectores SO, la próxima vez agregue enlaces. Lo estoy haciendo por usted ahora. – jwfearn

Cuestiones relacionadas